string、ArrayBuffy相互转换

落日映苍穹つ 2022-10-27 12:21 112阅读 0赞

字符串转ArrayBuff:

  1. //字符串转ArrayBuff
  2. strToArrayBuffer(s) {
  3. var i = s.length;
  4. var n = 0;
  5. var ba = new Array()
  6. for (var j = 0; j < i;) {
  7. var c = s.codePointAt(j);
  8. if (c < 128) {
  9. ba[n++] = c;
  10. j++;
  11. }
  12. else if ((c > 127) && (c < 2048)) {
  13. ba[n++] = (c >> 6) | 192;
  14. ba[n++] = (c & 63) | 128;
  15. j++;
  16. }
  17. else if ((c > 2047) && (c < 65536)) {
  18. ba[n++] = (c >> 12) | 224;
  19. ba[n++] = ((c >> 6) & 63) | 128;
  20. ba[n++] = (c & 63) | 128;
  21. j++;
  22. }
  23. else {
  24. ba[n++] = (c >> 18) | 240;
  25. ba[n++] = ((c >> 12) & 63) | 128;
  26. ba[n++] = ((c >> 6) & 63) | 128;
  27. ba[n++] = (c & 63) | 128;
  28. j+=2;
  29. }
  30. }
  31. return new Uint8Array(ba);
  32. }

ArrayBuff转字符串:

  1. Utf8ArrayToStr(array) {
  2. var out, i, len, c;
  3. var char2, char3;
  4. out = "";
  5. len = array.length;
  6. i = 0;
  7. while(i < len) {
  8. c = array[i++];
  9. switch(c >> 4)
  10. {
  11. case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
  12. // 0xxxxxxx
  13. out += String.fromCharCode(c);
  14. break;
  15. case 12: case 13:
  16. // 110x xxxx 10xx xxxx
  17. char2 = array[i++];
  18. out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
  19. break;
  20. case 14:
  21. // 1110 xxxx 10xx xxxx 10xx xxxx
  22. char2 = array[i++];
  23. char3 = array[i++];
  24. out += String.fromCharCode(((c & 0x0F) << 12) |
  25. ((char2 & 0x3F) << 6) |
  26. ((char3 & 0x3F) << 0));
  27. break;
  28. }
  29. }
  30. return out;
  31. }

发表评论

表情:
评论列表 (有 0 条评论,112人围观)

还没有评论,来说两句吧...

相关阅读