IntPtr到String和long?

时间:2010-07-15 09:55:24

标签: c# .net-2.0 marshalling

我正在使用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

1 个答案:

答案 0 :(得分:3)

如果您只想阅读long而不是字符串,请使用:

long l = Marshal.ReadInt64(result, 9);
return l;