IntPtr 到 String 和 long?
我正在使用 C# 和 .NET 2.0 框架。
我这里有一个从 IntPtr
中获取字符串的方法:
void* cfstring = __CFStringMakeConstantString(StringToCString(name));
IntPtr result = AMDeviceCopyValue_Int(device, unknown, cfstring);
if (result != IntPtr.Zero)
{
byte length = Marshal.ReadByte(result, 8);
if (length > 0)
{
string s = Marshal.PtrToStringAnsi(new IntPtr(result.ToInt64() + 9L), length);
return s;
}
}
return String.Empty;
它可以工作,并且所有数据都以字符串形式保存在我的 USB 设备中(AMDeviceCopyValue
方法的返回数据) 。
现在我明白了:
£\rº\0\0¡\t\0\0\0ˆ\0\0\0\0\0\0x>Ô\0\0\0\0Å¡\t\0\0\0 €1ÔxÕ͸MÔ\0\0\0\0Èě\t\0\0\0€)\0fŒ\a\0Value\0\0Ëě\t\0\0\0€7fŒ\a\0Result\0Î ¡\t\0\0\0ˆTÅfŒ\a\0\0Key\0\0\0\0ñ¡\t\0\0\0€+fŒ\a\0Port\0\0\0ô\t\0 \0\0€%fŒ\a\0Key\0\0\0\0÷´\t\0\0\0€:\0\0\0\0\0\0\0\0\0\ 0\0\0\0\0úì\t\0"
这被保存为 long
- 那么,我如何将此 IntPtr
转换为 long
并不是字符串
?
I am using C# and the .NET 2.0 framework.
I have this method here to get a string out of a IntPtr
:
void* cfstring = __CFStringMakeConstantString(StringToCString(name));
IntPtr result = AMDeviceCopyValue_Int(device, unknown, cfstring);
if (result != IntPtr.Zero)
{
byte length = Marshal.ReadByte(result, 8);
if (length > 0)
{
string s = Marshal.PtrToStringAnsi(new IntPtr(result.ToInt64() + 9L), length);
return s;
}
}
return String.Empty;
It works and all data which is saved as string in my USB-Device (return data of method AMDeviceCopyValue
).
Now I get this:
£\rº\0\0¨\t\0\0\0ˆ\0\0\0\0\0\0x>Ô\0\0\0\0Ũ\t\0\0\0€1ÔxÕ͸MÔ\0\0\0\0Ȩ\t\0\0\0€)\0fŒ\a\0Value\0\0˨\t\0\0\0€7fŒ\a\0Result\0Ψ\t\0\0\0ˆTÅfŒ\a\0\0Key\0\0\0\0ñ¨\t\0\0\0€+fŒ\a\0Port\0\0\0ô¨\t\0\0\0€%fŒ\a\0Key\0\0\0\0÷¨\t\0\0\0€:\0\0\0\0\0\0\0\0\0\0\0\0\0\0ú¨\t\0"
This is saved as long
- so, how I can get this IntPtr
into long
and not string
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您只想读取长数据而不是字符串,请使用:
If you simply want to read a long instead of a string, use: