从文件读取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)
。