IntPtr в строку и долго? - PullRequest
       4

IntPtr в строку и долго?

2 голосов
/ 15 июля 2010

Я использую C # и .NET 2.0 framework.

У меня есть этот метод здесь, чтобы получить строку из 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 \ 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 \ 0u \ т \ 0"

Это сохраняется как long - так, как я могу получить это IntPtr в long а не string?

1 Ответ

3 голосов
/ 15 июля 2010

Если вы просто хотите прочитать длинную строку вместо строки, используйте:

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