将偏移量添加到 IntPtr
我正在寻找一种在 C# 或 .NET 中执行指针操作的方法。
我想做一些非常简单的事情
有一个指针 IntPtr 我想获得指向前面 2 个字节的 IntPtr 对象。
我读了一些帖子,说下面的代码片段会起作用...
IntPtr ptr = new IntPtr(oldptr.ToInt32() + 2);
但我怀疑这个语句是否也适用于 64 位机器(因为寻址是 64 位的)..
我发现了这种优雅的方法来添加偏移量,但是不幸的是仅在.NET 4.0中 http: //msdn.microsoft.com/en-us/library/system.intptr.add%28VS.100%29.aspx
I'm looking for a way to perform pointer operations in C# or .NET in particular.
I want to do something very simple
Having a pointer IntPtr I want to get IntPtr object which points to 2 bytes ahead.
I read some post that the foolowing snippet will work...
IntPtr ptr = new IntPtr(oldptr.ToInt32() + 2);
But I have doubts whether this statement is also valid for 64-bit machine (since addressing is in 64-bits there)..
I found this elegant method to add offset, but unfortunately is in .NET 4.0 only http://msdn.microsoft.com/en-us/library/system.intptr.add%28VS.100%29.aspx
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
在 .net 4 中添加了静态 Add() 和 Subtract() 方法。
http://msdn.microsoft.com/en-us/library /system.intptr.add.aspx
In .net 4 static Add() and Subtract() methods have been added.
http://msdn.microsoft.com/en-us/library/system.intptr.add.aspx
我建议您使用 ToInt64() 和 long 来执行计算。这样您就可以避免 64 位版本的 .NET 框架出现问题。
这在 32 位系统上增加了一点开销,但更安全。
I suggest you to use ToInt64() and long to perform your computation. This way you will avoid problem on 64 bits version of the .NET framework.
This add a bit of overhead on 32 bits system, but it is safer.
对于 C# 中的指针算术,您应该在
unsafe
上下文中使用正确的指针:IntPtr
类型用于传递句柄或指针,也用于编组到支持指针的语言。但它不适用于指针算术。For pointer arithmetic in C# you should use proper pointers inside an
unsafe
context:The
IntPtr
type is for passing around handles or pointers and also for marshalling to languages that support pointers. But it's not for pointer arithmetic.我发现我可以通过使用 Marshal.ReadByte()、Marshal.ReadInt16() 等方法来避免指针操作。这组方法允许指定与 IntPtr 相关的偏移量...
I found that I can avoid pointer operations by using Marshal.ReadByte(), Marshal.ReadInt16() etc. methods. This group of methods allow to specify offset in releation to the IntPtr...
您可以使用扩展方法:
You can use a extension method: