ReactNative中字符串与二进制数组相互转换(UTF-8编码)

使用reactnative开发蓝牙类App时偶尔需要使用

来源于谷歌转换框架closure-library

//字符串转bytes

stringToUtf8ByteArray(str){
    var out = [], p =0;
    for (var i =0; i < str.length; i++) {
        var c = str.charCodeAt(i);
        if (c <128) {
               out[p++] = c;
        }else if (c <2048) {
              out[p++] = (c >>6) |192;
             out[p++] = (c &63) |128;
        }else if (((c &0xFC00) ==0xD800) && (i +1) < str.length &&
                  ((str.charCodeAt(i +1) &0xFC00) ==0xDC00)) {
            c =0x10000 + ((c &0x03FF) <<10) + (str.charCodeAt(++i) &0x03FF);
            out[p++] = (c >>18) |240;
            out[p++] = ((c >>12) &63) |128;
            out[p++] = ((c >>6) &63) |128;
            out[p++] = (c &63) |128;
        }else {
            out[p++] = (c >>12) |224;
            out[p++] = ((c >>6) &63) |128;
            out[p++] = (c &63) |128;
        }
      }
      return out;
}

//bytes转换成字符串

utf8ByteArrayToString(bytes) {
    var out = [], pos =0, c =0;
    while (pos < bytes.length) {
        var c1 = bytes[pos++];
        if (c1 <128) {
            out[c++] = String.fromCharCode(c1);
        }else if (c1 >191 && c1 <224) {
            var c2 = bytes[pos++];
            out[c++] = String.fromCharCode((c1 &31) <<6 | c2 &63);
        }else if (c1 >239 && c1 <365) {
            var c2 = bytes[pos++];
            var c3 = bytes[pos++];
            var c4 = bytes[pos++];
            var u = ((c1 &7) <<18 | (c2 &63) <<12 | (c3 &63) <<6 | c4 &63) -0x10000;
            out[c++] = String.fromCharCode(0xD800 + (u >>10));
            out[c++] = String.fromCharCode(0xDC00 + (u &1023));
        }else {
            var c2 = bytes[pos++];
            var c3 = bytes[pos++];
            out[c++] =String.fromCharCode((c1 &15) <<12 | (c2 &63) <<6 | c3 &63);
        }
        }
     return out.join('');
}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,687评论 25 708
  • “人生的路,要自己走”此时此刻,我才深有体会。突然,很佩服安吉,小小年纪就知道这么富有哲理的话。 鲁迅先生说过:“...
    TO西柚阅读 233评论 0 0
  • 1,扎克伯格说的那句话:“在一个变化如此快的世界里,你最大的风险就是不冒风险!”
    无邪1025阅读 254评论 0 0
  • 最近将住了九年的房子卖了,换一套学区好一点的房子。 卖房找的中介公司是我爱我家,为了能赶上今年的小学入学报名,我们...
    奔跑的小星_ecae阅读 198评论 0 0
  • 做梦了,梦见矫情闺蜜,说人不舒服在医院躺着,我也在医院坐在人家旁边,还说我本身应该是中毒了,人说是因为烤茄子,我一...
    拜泉0610陈晨阅读 234评论 0 1