从文件中读取十六进制数

Read hex number from file

本文关键字:十六进制数 读取 文件      更新时间:2023-09-26

我有一个以十六进制格式表示数据的(.hex)文件。以下是文件的示例:

: 100080000 c9408010c9408010c9408010c940801cc: 100090000 c9408010c9408010c9408010c9428019c: 1000 a0000c9408010c9408010c9408010c940801ac: 1000 b0000c9408010c9408010c9408010c9408019c: 1000 c0000c9408010c9408010c9408010c9408018c: 1000 d0000c9408010c9408010c9408010c9408017c

我编写以下nodejs代码来读取文件并将其转换为缓冲区,最后使用串行发送。

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。有没有办法把它当作数字来读?

使用说明:

parseInt(addr, 16)

代替:

Number(addr, 'hex')

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

两者之间有一些不同,你可以在这里和这里阅读,但本质上parseInt()允许你指定基数,而Number()不允许。

两者都将尝试根据要解析的字符串的格式猜测基数(如果未指定),因此理论上您也可以这样做:

Number('0x' + addr)

parseInt('0x' + addr)

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