十六进制到 ascii 错误转换
Hex to ascii wrong conversion
我有一个javascript函数,可以从HEX转换为ASCII,然后将其输出到串行连接。但是在监视串行连接时,我可以看到转换后的输出不正确。
我有这个javascript代码:
function hex2a(hexx) {
var hex = hexx.toString();//force conversion
var str = '';
for (var i = 0; i < hex.length; i += 2)
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
return str;
}
return {payload: hex2a(msg.payload)}; // returns '2460'
例如,我想转换这个十六进制:
0340209c
但是,在监视串行连接时,我看到实际发送的是:
03 40 20 c2 9c
因此,设备会以错误消息进行应答。我在这里挠头。一些十六进制命令可以正确转换(例如 0340615b )。我通过节点红色输出到串行连接。输出节点似乎只接受 ascii 文本,而不接受十六进制文本。
我希望有人能引导我朝着正确的方向前进。感谢您的任何回复!
谢谢! @Metabolix为我指出正确的方向!!我已经通过使用以下代码将我的十六进制字符串转换为缓冲区来解决我的问题。
return {payload: new Buffer(msg.payload, "hex")};
msg.payload 是一个注入的字符串,如下所示:
0340209c
在监视串行连接时,它现在可以读取正确的命令!
这是因为 JavaScript 和 Node-RED 对文本使用 UTF-8 编码,其中 Unicode 字符号 U+009c 编码为 c2 9c
。(请注意,ASCII 实际上是从 0x00 到 0x7f 的 7 位字符集,从 0x80 到 0xff 的 8 位代码取决于字符集或编码。
Node-RED 也有二进制支持(请参阅此 GitHub 问题)。文档相当模糊,但看起来您应该使用 Node.js Buffer 对象作为有效负载。
在 Node 中将十六进制转换为 ascii.js(在 v5+ 中测试)
const hex = '...';
const ascii = new Buffer(hex, 'hex');
https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings
试试这个:
function toAscii(hex, delimiter) {
var outputstr = '';
inputstr = inputstr.replace(/^(0x)?/g, '');
inputstr = inputstr.replace(/[^A-Fa-f0-9]/g, '');
inputstr = inputstr.split('');
for(var i=0; i<inputstr.length; i+=2) outputstr += String.fromCharCode(parseInt(inputstr[i]+''+inputstr[i+1], 16));
return outputstr;
}
- ng消息仅在触摸时显示错误,并在错误的初始显示上转换
- 用于查询错误转换的角度资源返回列表
- 灯箱中的幻灯片转换错误
- 从ASP转换后出现无效ViewState错误.NET 1.1到ASP.净额3.5
- CSS-3转换错误,菜单出现卡住
- 图像转换错误裁剪
- 注意:将数组从 php 转换为 javascript 时出现数组到字符串的转换错误
- Javascript CRM 转换错误
- javascript中的数字到字符串转换错误
- 转换错误:ArrayBuffer到Int16Array
- Mongoose强制转换错误-嵌入子文档
- 如何删除php中的数组到字符串转换错误
- firefox CSS转换错误
- 使用d3js时发生转换错误
- 这个类型转换错误与_id有什么关系?转换为objecd失败,值“123”;路径" id"'
- D3转换错误
- 显示id的转换错误,但id从未使用节点js
- Javascript将十六进制值转换错误
- d3.js绘制线条转换错误
- CSV到json转换错误