Skip to content

Instantly share code, notes, and snippets.

@jordwest
Forked from joaomaia/bcd2number.js
Last active December 31, 2015 19:09
Show Gist options
  • Save jordwest/8031649 to your computer and use it in GitHub Desktop.
Save jordwest/8031649 to your computer and use it in GitHub Desktop.
/**
* bcd2number -> takes a nodejs buffer with a BCD and returns the corresponding number.
* @param buffer The node.js Buffer object
* @param offset The byte offset in the buffer where the BCD starts
* @param length The number of bytes to read (a single byte represents 2 digits)
* @return number
*/
var bcd2number = function(buffer, offset, length)
{
var n = 0;
var m = 1;
for(var i = 0; i<length; i+=1) {
n += (buffer[length-1-i+offset] & 0x0F) * m;
n += ((buffer[length-1-i+offset]>>4) & 0x0F) * m * 10;
m *= 100;
}
return n;
}
/**
* number2bcd -> takes a number and returns the corresponding BCD in a nodejs buffer object.
* @param number 32 bit positive number
* @param size nodejs buffer size
* @return nodejs buffer
*/
var number2bcd = function(number, size) {
var s = size || 4; //default value: 4
var bcd = new Buffer(s);
bcd.fill(0);
while(number !== 0 && s !== 0) {
s-=1;
bcd[s] = (number % 10);
number = (number / 10)|0;
bcd[s] += (number % 10) << 4;
number = (number / 10)|0;
}
return bcd;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment