从文件读取hex数字

我有以hex格式表示数据的(.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作为一个数字与其他variables使用if条件进行比较。 当我尝试addr_num = Number(addr, 'hex'); 结果是NAN 。 有没有办法把它看作一个数字?

使用:

 parseInt(addr, 16) 

代替:

 Number(addr, 'hex') 

parsing一个16进制数字(hex)作为数字的string。

你可以在这里和这里读到两者之间的差异,但基本上parseInt()允许你指定基数,而Number()不能。

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

 Number('0x' + addr) 

要么

 parseInt('0x' + addr) 

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