Guest User

Untitled

a guest
Jul 19th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.21 KB | None | 0 0
  1. /*
  2. * Method to convert a number to BCD.
  3. * If a number is odd last nibble will be wet F.
  4. *
  5. * minSize can be used to set the number of minimum digits to represent.
  6. * Examples:
  7. * numberToBCD(1) = [0x1F]
  8. * numberToBCD(1, 2) = [0x01]
  9. * numberToBCD(1, 3) = [0x00, 0x1F]
  10. * numberToBCD(1, 4) = [0x00, 0x01]
  11. * numberToBCD(12) = [0x12]
  12. * numberToBCD(12, 3) = [0x01, 0x2F]
  13. * numberToBCD(123) = [0x12, 0x3F]
  14. * numberToBCD(1234) = [0x12, 0x34]
  15. */
  16. function numberToBCD(number, minSize = 0) {
  17. const digits = [];
  18. let numDigits = 1;
  19. if (number > 0) numDigits = Math.floor(Math.log10(number)) + 1;
  20. let toFill = 0;
  21. if (numDigits < minSize) toFill = minSize - numDigits;
  22.  
  23. let evenPosition = (numDigits + toFill)%2 == 0;
  24. if (!evenPosition) digits.push(0x0F); // Add filler value 0xF to last digit
  25. while ((number + toFill) > 0) {
  26. const digit = number%10;
  27. if (number == 0) --toFill;
  28. if (evenPosition) digits.push(digit);
  29. else digits[digits.length - 1] |= (digit << 4);
  30. number = Math.floor(number/10);
  31. evenPosition = !evenPosition;
  32. }
  33.  
  34. // Add 0 case
  35. if (digits.lenght == 0) digits.push(0x0F);
  36.  
  37. return digits.reverse();
  38. }
Add Comment
Please, Sign In to add comment