好的,首先要感谢您的时间。这让我发疯了。
因此,经过大量挖掘,我现在通过RS232进行了适当的"交谈",这意味着使用十六进制与它交谈。
因此,我已经能够将数据发送到规模上并根据需要将其恢复。当我在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
如果我将此值在ASCII网站上的任何在线十六进制上获得(例如(,我得到的结果是正确的,应该是:
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ãoMeyira
update Chrisg在评论中指出的,如果您在浏览器中使用完全相同的功能,则结果是正确的(检查 -> codepen(!这是一些node.js quirk ????我正在使用节点v8.9.3。
因此,经过大量的测试和挖掘后,我注意到Windows Commandline中节点的结果不同(我在Mac上(。
因此,在我测试了字符串的长度而不是其内容后,我发现它到处都是完全相同的,这基本上意味着这是一个问题,即字符串的内容被命令行视为其他东西。..非常感谢苹果!
因此,如果您使用串行端口和通信协议,这些端口和通信协议可以将十六进制或ASCII持续使用,那么最好是不使用命令行。
只是一个小建议人!