3 回答
TA贡献1812条经验 获得超5个赞
正确的应该是
string UnpackFixed(byte[] data, System.Text.Encoding encoding)
{
int i;
for (i = 0; i < data.Length; ++i)
if(data[i] == (byte)0)
break;
return encoding.GetString(data, i);
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
struct DeviceInfo
{
uint32 maxScanrate;
uint32 minScanrate;
uint32 maxNumOfPoints;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
byte type[];
};
DeviceInfo pDevInfo = new DeviceInfo();
pDevInfo.type = new byte[32];
int r4 = GetDeviceInfo(0, ref pDevInfo);
Console.WriteLine(" - type: " + UnpackFixed(pDevInfo.type));
我敢肯定有一种方法可以做到这一点,string但是所有古老的显而易见的方法都倾向于将字符串传递给本机代码,并且什么也得不到。在这里,练习是找回固定长度的字节字符串。如果确实为字符串解决了问题,那么最终将使用System.Text.Encoding.Default正确或不正确的字符串,并且没有任何方法可以覆盖它。
System.Text.Encoding.ASCII可能是错误的,在这种情况下,您需要处理编码。System.Text.Encoding.Default也许可以在ASCII不工作的地方工作,在这种情况下,您应该考虑在多字节字符编码上是否有奇怪的失败模式。目前尚不清楚设备是始终使用与操作系统相同的编码,还是采用固定编码(在这种情况下,您应指定编码)。
- 3 回答
- 0 关注
- 228 浏览
添加回答
举报