【发布时间】:2016-05-23 01:07:42
【问题描述】:
我正在尝试将 String 转换为 byte[],然后转换为 IBuffer 以设置我的 HidOutputReport.Data 字段。
当我尝试使用 byte[].AsBuffer() 时,VS2015 会抛出 ArgumentException 并提供“值不在预期范围内”作为有关异常的附加信息。
如果我尝试使用 DataWriter,当我调用 DataWriter.DetachBuffer() 时会引发相同的异常。
如果有人知道为什么会发生这种情况或我可以尝试将我的 String 放入 IBuffer 的替代方法,我们将不胜感激。
编辑:添加代码
HidOutputReport outputReport = device.CreateOutputReport();
byte[] bytesToCopy = new byte[textBox.Text.Length];
bytesToCopy = System.Text.Encoding.ASCII.GetBytes(textBox.Text);
//DataWriter dataWriter = new DataWriter();
//dataWriter.WriteBytes(bytesToCopy);
outputReport.Data = bytesToCopy.AsBuffer();
//outputReport.Data = CryptographicBuffer.CreateFromByteArray(bytesToCopy);
//WindowsRuntimeBufferExtensions.CopyTo(bytesToCopy, 0, outputReport.Data, 0, bytesToCopy.Length);
uint bytesWritten = await proscannerSystem_device.SendOutputReportAsync(outputReport);
您可以看到我尝试复制的其他一些方法。值得注意的是WindowsRuntimeBufferExtensions.CopyTo() 似乎 可以工作,但是我错过了第一个字节(我试图弄清楚这是否是我的副本的问题,并让我遇到了这个问题倾向于相信它是)。
【问题讨论】:
-
你可以用你的代码更新你的问题吗?
-
嘿@RogerHartley 我已经添加了一些代码,但我不相信它会提供很多洞察力。
-
我想知道编码是否可能是问题 - 您使用的是 ASCII 编码,但字符串是 UT16。我不相信这是答案,因为 AsBuffer() 只是将 IBuffer 包装在一堆字节上,它并不关心这些字节是什么。但是,这是可以尝试的——尝试使用 Encoding.Unicode.GetBytes() 看看它是否有任何不同。
标签: c# usb windows-10 win-universal-app hid