栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将字节数组转换为base128有效的JSON字符串

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将字节数组转换为base128有效的JSON字符串

ES6:

编码

let bytesTobase128 = (bytesArr) => {    // 128 characters to enpre as json-string    let c= "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz¼½ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"     let fbits=[];     let bits = (n,b=8) => [...Array(b)].map((x,i)=>n>>i&1);     bytesArr.map(x=> fbits.push(...bits(x)));    let fout=[];     for(let i =0; i<fbits.length/7; i++) {         fout.push(parseInt(fbits.slice(i*7, i*7+7).reverse().join(''),2))      };    return (fout.map(x => c[x])).join('');}// Example// bytesTobase128([23, 45, 65, 129, 254, 42, 1, 255]) => "NÚ4AèßÊ0ÿ1"

解码

let base128ToBytes = (base128str) => {    // 128 characters to enpre as json-string    let c= "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz¼½ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"    dfout = base128str.split('').map(x=>c.indexOf(x));    let dfbits = [];    let bits = (n,b=8) => [...Array(b)].map((x,i)=>n>>i&1);    dfout.map(x=> dfbits.push(...bits(x,7) ));    let dfbytes=[];     let m1 = dfbits.length%8 ? 1 : 0;    for(let i =0; i<dfbits.length/8-m1; i++) {         dfbytes.push(parseInt(dfbits.slice(i*8, i*8+8).reverse().join(''),2))      };    return dfbytes;}// Example// base128ToBytes("NÚ4AèßÊ0ÿ1") => [23, 45, 65, 129, 254, 42, 1, 255]

我在这里嵌入

bits
功能-这里。这里的掩盖思想是将字节数组转换为位数组,然后将每7位(值从0到127)作为字符编号icharakter list
c
。在解码中,我们将每个字符数更改为7位数字并创建数组,然后将每个8位数据包打包为该数组,并将其解释为字节。

要查看ASCI中的字符并从中选择128个(任意),请在控制台中键入

[...Array(256)].map((x,i) => String.fromCharCode(i)).join('');

我尽量避免在不同的上下文中具有“特殊含义”的字符

! @ # $ % ' & ...

这是工作示例(转换

Float32Array
为json)。

在Chrome,Firefox和Safari上测试

结论

将bytes数组转换为base128字符串(有效的json)后,输出字符串小于

15%
输入数组。

更新资料

多挖一点,然后暴露出来,当我们发送代码大于128(

¼½ÀÁÂÃÄ...
)的字符时,chrome实际上发送了两个字符(字节),而不是一个:(-我以这种方式进行测试:在网址栏中输入
chrome: // net-internals /#events (并发送POST请求),并在 _URL_REQUEST >
HTTP_STREAM_REQUEST> UPLOAD_DATA_STREAM_INIT>
total_size中_我们看到当正文包含大于128的字符字符时,请求的大小是原来的两倍。因此,实际上,发送此字符:(我们没有收益。对于base64字符串,我们没有观察到这种负面行为-
但是我离开了此过程,因为它们可能会被用于发送以外的其他目的(例如比base64更好的替代localstorage中的存储二进制数据的方式-
但是可能存在更好的方法…?)。




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/410088.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号