我正在使用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 \ 0A \吨\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0X&≠0 \ 0 \ 0 \ 0 \ 0A \吨\ 0 \ 0 \ 0 €1ÔxÕ͸MÔ\ 0 \ 0 \ 0 \ 0E \吨\ 0 \ 0 \ 0€)\0fŒ\一个\ 0Value \ 0 \ 0E \吨\ 0 \ 0 \ 0€7fŒ\一个\ 0Result \ 0I ¨\吨\ 0 \ 0 \0TÅfŒ\一个\ 0 \ 0Key \ 0 \ 0 \ 0 \ 0N \吨\ 0 \ 0 \ 0€+ FOE \一个\ 0Port \ 0 \ 0 \ 0°\吨\ 0 \ 0 \ 0€%FOE \一个\ 0Key \ 0 \ 0 \ 0 \ 0÷¨\吨\ 0 \ 0 \ 0€:\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 U \吨\ 0"
保存为long
- 所以,我如何将此IntPtr
转换为long
而不是string
?
答案 0 :(得分:3)
如果您只想阅读long而不是字符串,请使用:
long l = Marshal.ReadInt64(result, 9);
return l;