IntPtr 到 String 和 long?

发布于 2024-09-09 05:26:19 字数 1075 浏览 4 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蒗幽 2024-09-16 05:26:19

如果您只想读取长数据而不是字符串,请使用:

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

If you simply want to read a long instead of a string, use:

long l = Marshal.ReadInt64(result, 9);
return l;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文