2015-08-31 2 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') 

разобрать строку с Radix 16 (HEX) в виде числа.

Есть несколько различий между ними, которые вы можете прочитать на here и here, но, по существу parseInt() позволяет определить десятичную тогда Number() нет.

Оба будут пытаться угадать десятичную на основе формата строки для синтаксического анализа (если не указано иное), так что в теории вы могли бы также сделать:

Number('0x' + addr) 

или

parseInt('0x' + addr) 

но поскольку строка, которую вы читаете из файла, не находится в этом формате, и вам нужно будет стечь '0x' перед ней, вам, вероятно, лучше всего использовать parseInt(addr, 16).

Смежные вопросы