人民医院前端

hex.js 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // Hex JavaScript decoder
  2. // Copyright (c) 2008-2013 Lapo Luchini <lapo@lapo.it>
  3. // Permission to use, copy, modify, and/or distribute this software for any
  4. // purpose with or without fee is hereby granted, provided that the above
  5. // copyright notice and this permission notice appear in all copies.
  6. //
  7. // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  8. // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  9. // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  10. // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  11. // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  12. // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  13. // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  14. /*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */
  15. var decoder;
  16. export var Hex = {
  17. decode: function (a) {
  18. var i;
  19. if (decoder === undefined) {
  20. var hex = "0123456789ABCDEF";
  21. var ignore = " \f\n\r\t\u00A0\u2028\u2029";
  22. decoder = {};
  23. for (i = 0; i < 16; ++i) {
  24. decoder[hex.charAt(i)] = i;
  25. }
  26. hex = hex.toLowerCase();
  27. for (i = 10; i < 16; ++i) {
  28. decoder[hex.charAt(i)] = i;
  29. }
  30. for (i = 0; i < ignore.length; ++i) {
  31. decoder[ignore.charAt(i)] = -1;
  32. }
  33. }
  34. var out = [];
  35. var bits = 0;
  36. var char_count = 0;
  37. for (i = 0; i < a.length; ++i) {
  38. var c = a.charAt(i);
  39. if (c == "=") {
  40. break;
  41. }
  42. c = decoder[c];
  43. if (c == -1) {
  44. continue;
  45. }
  46. if (c === undefined) {
  47. throw new Error("Illegal character at offset " + i);
  48. }
  49. bits |= c;
  50. if (++char_count >= 2) {
  51. out[out.length] = bits;
  52. bits = 0;
  53. char_count = 0;
  54. }
  55. else {
  56. bits <<= 4;
  57. }
  58. }
  59. if (char_count) {
  60. throw new Error("Hex encoding incomplete: 4 bits missing");
  61. }
  62. return out;
  63. }
  64. };