uint8-from-hex.js 1007 B

1234567891011121314151617181920212223242526
  1. 'use strict';
  2. var globalThis = require('../internals/global-this');
  3. var uncurryThis = require('../internals/function-uncurry-this');
  4. var Uint8Array = globalThis.Uint8Array;
  5. var SyntaxError = globalThis.SyntaxError;
  6. var min = Math.min;
  7. var stringMatch = uncurryThis(''.match);
  8. module.exports = function (string, into) {
  9. var stringLength = string.length;
  10. if (stringLength % 2 !== 0) throw new SyntaxError('String should be an even number of characters');
  11. var maxLength = into ? min(into.length, stringLength / 2) : stringLength / 2;
  12. var bytes = into || new Uint8Array(maxLength);
  13. var segments = stringMatch(string, /.{2}/g);
  14. var written = 0;
  15. for (; written < maxLength; written++) {
  16. var result = +('0x' + segments[written] + '0');
  17. // eslint-disable-next-line no-self-compare -- NaN check
  18. if (result !== result) {
  19. throw new SyntaxError('String should only contain hex characters');
  20. }
  21. bytes[written] = result >> 4;
  22. }
  23. return { bytes: bytes, read: written << 1 };
  24. };