Binary.mjs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /**
  2. * Binary functions.
  3. *
  4. * @author n1474335 [n1474335@gmail.com]
  5. * @copyright Crown Copyright 2018
  6. * @license Apache-2.0
  7. */
  8. import Utils from "../Utils.mjs";
  9. /**
  10. * Convert a byte array into a binary string.
  11. *
  12. * @param {Uint8Array|byteArray} data
  13. * @param {string} [delim="Space"]
  14. * @param {number} [padding=8]
  15. * @returns {string}
  16. *
  17. * @example
  18. * // returns "00010000 00100000 00110000"
  19. * toBinary([10,20,30]);
  20. *
  21. * // returns "00010000 00100000 00110000"
  22. * toBinary([10,20,30], ":");
  23. */
  24. export function toBinary(data, delim="Space", padding=8) {
  25. if (!data) return "";
  26. delim = Utils.charRep(delim);
  27. let output = "";
  28. for (let i = 0; i < data.length; i++) {
  29. output += data[i].toString(2).padStart(padding, "0") + delim;
  30. }
  31. if (delim.length) {
  32. return output.slice(0, -delim.length);
  33. } else {
  34. return output;
  35. }
  36. }
  37. /**
  38. * Convert a binary string into a byte array.
  39. *
  40. * @param {string} data
  41. * @param {string} [delim]
  42. * @param {number} [byteLen=8]
  43. * @returns {byteArray}
  44. *
  45. * @example
  46. * // returns [10,20,30]
  47. * fromBinary("00010000 00100000 00110000");
  48. *
  49. * // returns [10,20,30]
  50. * fromBinary("00010000:00100000:00110000", "Colon");
  51. */
  52. export function fromBinary(data, delim="Space", byteLen=8) {
  53. const delimRegex = Utils.regexRep(delim);
  54. data = data.replace(delimRegex, "");
  55. const output = [];
  56. for (let i = 0; i < data.length; i += byteLen) {
  57. output.push(parseInt(data.substr(i, byteLen), 2));
  58. }
  59. return output;
  60. }