我写能与HID设备通信的.NET应用程序从HID设备读取制造商字符串。我希望能够从设备固件中检索并解析制造商字符串。我知道,在hid.dll有一个名为HidD_GetManufacturerString方法。 MSDN描述了这种方法如下:故障使用hid.dll API
BOOLEAN HidD_GetManufacturerString(
IN HANDLE HidDeviceObject,
OUT PVOID Buffer,
IN ULONG BufferLength
);
我使用这个方法的包装看起来像这样...
[DllImport("hid.dll", SetLastError = true)]
internal static extern Boolean HidD_GetManufacturerString(
SafeFileHandle hFile,
Byte[] SerialNumber,
Int32 SerianNumberLength);
我需要知道两件事情。首先,我怎么知道初始化SerialNumber缓冲区的大小是多少?当我做业务就像GetFeatureReport我知道要什么尺寸的缓冲区,因为我可以从设备检索的最大特点报告长度使用HidD_GetAttributes属性();不幸的是,这种方法没有给出任何有关制造商字符串,序列号字符串,产品名称字符串等长度的信息。
我的第二个问题是,解析字节数组的正确方法是返回到一个字符串?我试过使用
System.Text.Encoding.ASCII.GetString(MfrBuffer)
但我得到一个奇怪的结果。对于戴尔manufacturered产品我的字符串看起来像“d \ 0E \0升\0升\ 0 \ 0 \ 0 \ 0 \ 0 ...”中的“\ 0”继续给我传递的缓冲区的末尾。我如何解析“戴尔”?
太好了。那么,如何修剪不使用整个126宽字符的设备的所有零点? – PICyourBrain 2010-02-24 21:31:49
貌似这个做到了...... raw.TrimEnd( “\ 0” .ToCharArray()); – PICyourBrain 2010-02-24 21:38:57