Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Method to convert a number to BCD.
- * If a number is odd last nibble will be wet F.
- *
- * minSize can be used to set the number of minimum digits to represent.
- * Examples:
- * numberToBCD(1) = [0x1F]
- * numberToBCD(1, 2) = [0x01]
- * numberToBCD(1, 3) = [0x00, 0x1F]
- * numberToBCD(1, 4) = [0x00, 0x01]
- * numberToBCD(12) = [0x12]
- * numberToBCD(12, 3) = [0x01, 0x2F]
- * numberToBCD(123) = [0x12, 0x3F]
- * numberToBCD(1234) = [0x12, 0x34]
- */
- function numberToBCD(number, minSize = 0) {
- const digits = [];
- let numDigits = 1;
- if (number > 0) numDigits = Math.floor(Math.log10(number)) + 1;
- let toFill = 0;
- if (numDigits < minSize) toFill = minSize - numDigits;
- let evenPosition = (numDigits + toFill)%2 == 0;
- if (!evenPosition) digits.push(0x0F); // Add filler value 0xF to last digit
- while ((number + toFill) > 0) {
- const digit = number%10;
- if (number == 0) --toFill;
- if (evenPosition) digits.push(digit);
- else digits[digits.length - 1] |= (digit << 4);
- number = Math.floor(number/10);
- evenPosition = !evenPosition;
- }
- // Add 0 case
- if (digits.lenght == 0) digits.push(0x0F);
- return digits.reverse();
- }
Add Comment
Please, Sign In to add comment