如何在JavaScript中访问字符串中的二进制数据

3
我使用的设备驱动程序捕获读卡器(RFID)的输入并将其发送到键盘缓冲区(键盘楔子)。 捕获的数据可以(而且必须)通过JavaScript进行中间转换。很不幸,这个JavaScript在驱动程序上下文中被处理 - 不幸的是,JavaScript以字符串类型的DATA变量接收捕获的“二进制”数据。
可以想象JavaScript的作用:它将输入解释为Unicode,并因此无法让您在字符串中按字节寻址 - 它根据值在1…4个字节长度之间任意更改。
我只需要将二进制字符串转换为可读的字符串格式:“xf9268970”应该读作“f9268970”。迄今为止,我所尝试的一切都很糟糕。
感谢任何提示!

你是将其捕获在文本字段中,还是监听按键并捕获ASCII值? - Diodeus - James MacFarlane
你能访问驱动程序源代码吗? - Aaron Digulla
不好意思 - 没有访问驱动程序源代码的权限。这是一个通用的Windows驱动程序(一个键盘楔形转换器,将COM输入指向键盘 - 并进行JavaScript转换)。 - Klaus
2个回答

1
首先,免责声明。我没有使用二进制数据和javascript工作过,但也许这可以帮助。
也许您可以循环遍历字符串,并使用charAt查看每个字符。据我所理解,charAt返回ASCII值(而不是Unicode)。所以,您会得到2个字节,而不是4个字节(?)。
var character;
for (var i = 0; i < str.length; i++) {
    character = str.charAt(i);
}

也许这个参考资料可以为您指明方向:charAt 参考资料


不幸的是,如下所示的HTML页面中,charAt和字符串长度不能按照每个代码一个字符的方式工作 - 即使代码长达6个字节,它也会返回长度为1 :-( - Klaus
`<html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script> var test = String.fromCharCode(0xFE707f75fe45); var out =
'<b>fromCharCode(0xFE707f75fe45):</b>' + '<br>' + 'length= ' + test.length + '<br>' + 'charAt(0)= ' + test.charAt(0) + '<br>' + 'charAt(1)= ' + test.charAt(1) + '<br>' ; document.writeln(out); </script> </head>`
- Klaus

0
我认为你应该单独监听按键并将值记录在变量中,而不是读取文本框。

正如所说:我无法影响数据到达JavaScript的方式,因为它是驱动程序内置的JavaScript功能。我只能获取扫描仪读取的内容。- Klaus - Klaus
因为它是一个键盘楔形设备,所以您应该能够在自己的JS代码中连接一个键监听器。我已经用一个使用键盘楔形设备的条形码扫描仪做过这个操作。 - Diodeus - James MacFarlane
你是指在接收输入字段中的键监听器吗?但是有很多地方可以使用它 - 有些在网页内部,甚至可能是 Excel 单元格...所以这可能不是合适的地方! - Klaus
一个键盘监听器是通用的。它不依赖于输入焦点,尽管您可以通过设置自己的标志使其在输入元素没有焦点时退出函数。 - Diodeus - James MacFarlane
我恐怕这超出了我的能力范围...并且超过了我愿意花费的努力,包括支持,因为这个调整后的楔形应该要在许多电脑上推广,而不仅仅是我的电脑。 - Klaus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接