gpt4 book ai didi

c# - 从 C# 中的 []byte 获取字符串

转载 作者:太空宇宙 更新时间:2023-11-03 19:37:07 25 4
gpt4 key购买 nike

我有一个奇怪的问题。我有一个带有标签的表单,用于在程序的某些点输出文本而不是控制台输出。给定以下代码:

result = SetupDiGetDeviceRegistryProperty(deviceInfoSet, ref tBuff, 
(uint)SPDRP.DEVICEDESC,
out RegType, ptrBuf,
buffersize, out RequiredSize);

if (!result)
{
errorMessage = new Win32Exception(Marshal.GetLastWin32Error()).Message;
statusLabel.Text += "\nSetupDiGetDeviceRegistryProperty failed because "
+ errorMessage.ToString();
}
else
{
statusLabel.Text += "\nPtr buffer length is: " + ptrBuf.Length.ToString();

sw.WriteLine(tCode.GetString(ptrBuf) );

sw.WriteLine("\n");
// This is the only encoding that will give any legible output.
// Others only show the first character "U"
string tmp = tCode.GetString(ptrBuf) + "\n";

statusLabel.Text += "\nDevice is: " + tmp + ".\n";
}

我在标签上只得到一个硬件 ID 输出。这段代码在我的循环结束时。起初,这让我觉得我的循环有点挂了,但是当我决定将输出定向到一个文件时,我几乎得到了我想要的,并且输出在循环之外。谁能告诉我这是怎么回事?我只想从 []byte (ptrBuf) 中获取表示硬件 ID 的字符串。有人可以解释一下这里发生了什么吗?我的工作环境是MSVstudio 2008 express。在 Windows 7 中。

谢谢

最佳答案

很遗憾,您还没有显示tCode 是什么。

查看 docs for the API call看起来应该用 REG_SZ 填充它。我怀疑那是 Unicode,即

string property = Encoding.Unicode.GetString(ptrBuf, 0, RequiredSize);

应该转换它。

但是,如果您期望多个值,我想知道它是否是一个 '\0' 分隔的字符串:尝试在 Win32 控件中输出它确实会在第一个 处停止'\0'.

试试这个:

string property = Encoding.Unicode.GetString(ptrBuf, 0, RequiredSize);
.Replace('\0', ' ');

这应该(如果我猜对的话)用空格分隔值。

关于c# - 从 C# 中的 []byte 获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/865621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com