因为需要需要生成一张字节流二维码,然后研究了下原理大致是:

十六进制数据→二进制数组→通过fromCharCode转换回字符串→通过qrious等不支持生成中文二维码的二维码生成库生成二维码。

用到的代码如下:

十六进制字符串转二进制数组:

  1. /**
  2. * @desc 十六进制字符串转二进制数组
  3. */
  4. function Str2Bytes(str){
  5. var pos = 0;
  6. var len = str.length;
  7. if (len % 2 != 0){
  8. return null;
  9. }
  10. len /= 2;
  11. var hexA = new Array();
  12. for (var i = 0; i < len; i++){
  13. var s = str.substr(pos, 2);
  14. var v = parseInt(s, 16);
  15. hexA.push(v);
  16. pos += 2;
  17. }
  18. return hexA;
  19. }

附带转回去:

  1. /**
  2. * @desc 二进制数组转十六进制字符串
  3. */
  4. function Bytes2Str(arr){
  5. var str = "";
  6. for (var i = 0; i < arr.length; i++){
  7. var tmp = arr[i].toString(16);
  8. if (tmp.length === 1){
  9. tmp = "0" + tmp;
  10. }
  11. str += tmp;
  12. }
  13. return str;
  14. },

生成二维码用的字符串

  1. var QRText = String.fromCharCode.apply(null, byteArr);//二维码字符串

最后通过qrious插件生成二维码