代码之家  ›  专栏  ›  技术社区  ›  PassionateDeveloper

IntPtr到String和long?

  •  2
  • PassionateDeveloper  · 技术社区  · 14 年前

    我用这个方法从 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\0\0x>\0\0\0\0¨\t\0\0\01xM\0\0\0\0¨\t\0\0\0\0f\a\0值\0\0¨\t\0\0\07f\a\0结果\0¨\t\0\0\0Tf\a\0\0Key\0\0\0\0±¨\t\0\0\0+f\a\0端口\0\0\0¨\t\0\0\0%f\a\0键\0\0\0\0·¨\t\0\0\0:\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0¨\t\0“

    保存为 long -那么,我怎样才能得到这个呢 进入之内 长的 string ?

    1 回复  |  直到 10 年前
        1
  •  3
  •   Jaroslav Jandek    14 年前

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