从文件中读取十六进制数

时间:2015-08-31 11:36:23

标签: javascript node.js

我有(.hex)文件,代表十六进制格式的数据。这是文件的样本:

  

:100080000C9408010C9408010C9408010C940801CC   :100090000C9408010C9408010C9408010C9428019C   :1000A0000C9408010C9408010C9408010C940801AC   :1000B0000C9408010C9408010C9408010C9408019C   :1000C0000C9408010C9408010C9408010C9408018C   :1000D0000C9408010C9408010C9408010C9408017C

我编写以下nodejs代码来读取文件并将其转换为Buffer,最后使用serial发送。

var fs = require("fs");

fs.readFile('./code.hex', function(err, code){

    var str = code.toString();
    var line = str.split('\n');

    addr = line[1].slice(1, 9);
    //addr_num = Number(addr, 'hex');

    data = line[1].slice(9, (line[1].length - 3));
    console.log(data);
    var buf = new Buffer(data, 'hex');
}

行中的前8位是地址的一部分,行的其余部分是数据。我想要的是将addr读作一个数字,将其与使用if条件的其他变量进行比较。当我尝试addr_num = Number(addr, 'hex');时,结果为NAN。有没有办法把它读成数字?

1 个答案:

答案 0 :(得分:2)

使用:

parseInt(addr, 16)

而不是:

Number(addr, 'hex')

用基数16(十六进制)作为数字解析字符串。

这两者之间存在一些差异,您可以在herehere上阅读,但基本上parseInt()允许您指定基数而Number()不会“T

两者都会尝试根据要解析的字符串格式猜测基数(如果没有指定),所以理论上你也可以这样做:

Number('0x' + addr)

parseInt('0x' + addr)

但由于你从文件中读取的字符串不是这种格式,你必须在它前面拼'0x',你最好只使用parseInt(addr, 16)