Disons que j'ai un flux de données hexadécimal, que je veux diviser en blocs de 3 octets que je dois lire comme un entier.
Par exemple: étant donné une chaîne hexadécimale 01be638119704d4b9a
J'ai besoin de lire les trois premiers octets 01be63
et le lire comme un entier 114275
. Voici ce que j'ai obtenu:
var sample = '01be638119704d4b9a';
var buffer = new Buffer(sample, 'hex');
var bufferChunk = buffer.slice(0, 3);
var decimal = bufferChunk.readUInt32BE(0);
Le readUInt32BE
fonctionne parfaitement pour les données de 4 octets, mais ici j'obtiens évidemment:
RangeError: index out of range
at checkOffset (buffer.js:494:11)
at Buffer.readUInt32BE (buffer.js:568:5)
Comment lire correctement les 3 octets en entier?
Si vous utilisez node.js v0.12 + ou io.js, il y a buffer.readUIntBE()
qui autorise un nombre variable d'octets:
var decimal = buffer.readUIntBE(0, 3);
(Notez que c'est readUIntBE
pour Big Endian et readUIntLE
pour Little Endian).
Sinon, si vous utilisez une ancienne version de node, vous devrez le faire manuellement (vérifiez d'abord les limites bien sûr):
var decimal = (buffer[0] << 16) + (buffer[1] << 8) + buffer[2];
J'utilise ceci, si quelqu'un sait que quelque chose ne va pas, veuillez le conseiller;
const integer = parseInt(buffer.toString("hex"), 16)