2015-08-31 37 views
1

我有用十六進制格式表示數據的(.hex)文件。下面是該文件的樣本:從文件中讀取十六進制數

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

我寫了下面的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。有沒有辦法將它看作一個數字?

回答

2

使用:

parseInt(addr, 16) 

代替:

Number(addr, 'hex') 

解析用基數16(十六進制)的字符串爲一個數字。

有一對夫婦的兩個之間的差異,你可以在herehere讀了,但本質上parseInt()允許你指定的基數,而​​沒有。

雙方將嘗試猜測基於字符串解析的格式的基數(如果未指定),所以理論上你也可以這樣做:

Number('0x' + addr) 

parseInt('0x' + addr) 

但由於您從文件中讀取的字符串不是這種格式,因此您必須在它前面拼接'0x',您最好使用parseInt(addr, 16)