好的,首先感谢您的时间。这让我很疯狂。
因此经过大量的挖掘后,我现在正在通过RS232正确地“说话”,这意味着使用HEX与它交谈。
所以我已经能够将数据发送到规模并根据需要将其恢复。我在node.js上处理它时得到的结果却令我疯狂。
连接后经过的原始数据是
<Buffer 06 02 30 32 1b 33 1b 31 31 34 34 35 1b 30 30 30 31 32 30 1b 30 30 31 33 37 33 03>
我正确地将其转换为字符串:
var coiso = Buffer.from(Buffer.concat(porquinho), 'ascii').toString('hex');
得到结果:
060230321b331b31313434351b3030303132301b30303133373303
如果我在任何在线HEX到ASCII网站上获得此值(例如this),我得到的结果应该是正确的:
02311445000120001373
但是,如果我在节点中使用任何javascript函数进行转换,包括网站使用的那个:
function OnConvert(doom)
{
hex = doom;
hex = hex.match(/[0-9A-Fa-f]{2}/g);
len = hex.length;
if( len==0 ) return;
txt='';
for(i=0; i<len; i++)
{
h = hex[i];
code = parseInt(h,16);
t = String.fromCharCode(code);
txt += t;
}
return txt;
}
我毫无例外地得到的结果是:
0214450012001373
这是完全不同的,因为我在比例中丢失了一位数的重量以及计算出的价格中的一位数!
我在这里做错了什么?
请帮帮我......这让我疯了!
提前谢谢你,
亲切的问候:
JoãoMoreira
更新正如ChrisG的评论所指出的,如果您在浏览器中使用完全相同的功能,结果是正确的(检查它 - &gt; codepen)!这是一些node.js怪癖????我正在使用节点v8.9.3。
答案 0 :(得分:0)
所以经过大量的测试和挖掘后,我注意到节点中的结果在windows命令行中是不同的(我在Mac上)。
因此,在我测试了字符串的长度而不是其内容后,我发现它在各处完全相同,这基本上意味着这是一个问题,字符串的内容被命令行视为其他东西。 ..非常感谢Apple!
因此,如果您使用SERIAL PORTS和包含HEX或ASCII的通信协议,如果您不使用命令行,那么它可能是最好的。
只是一个小建议的人!!!