十六进制到ASCII转换在节点中出错



好的,首先要感谢您的时间。这让我发疯了。

因此,经过大量挖掘,我现在通过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持续使用,那么最好是不使用命令行。

只是一个小建议人!

最新更新