这里是引用
提示:使用Base64 编吗结果 : ‘AAAE2X==’
微信小程序hex转整数
前言
提示:这里可以添加本文要记录的大概内容:
例如:写base64转码的时候遇到16进制转整数的问题 。
提示:以下是本篇文章正文内容,下面案例可供参考
一、base64转字节代码
base64ToArrayBuffer:function(sBase64, nBlockSize) {
var sB64Enc = sBase64.replace(/[^A-Za-z0-9\+\/]/g, ""), nInLen = sB64Enc.length,
nOutLen = nBlockSize ? Math.ceil((nInLen * 3 + 1 >>> 2) / nBlockSize) * nBlockSize : nInLen * 3 + 1 >>> 2, aBytes = new Uint8Array(nOutLen);
for (var nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0; nInIdx < nInLen; nInIdx++) {
nMod4 = nInIdx & 3;
nUint24 |= this.b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << 18 - 6 * nMod4;
if (nMod4 === 3 || nInLen - nInIdx === 1) {
for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++) {
aBytes[nOutIdx] = nUint24 >>> (16 >>> nMod3 & 24) & 255;
}
nUint24 = 0;
}
}
return aBytes;
},
#来自网页文章
二、使用步骤
通过上面一步base64转码由‘AAAE2X==’ ,得到[0,0,4,217]数组,需要把这数组转成整数,正确的结果是1241,我到处找文章,没有找到,尝试各种代码,得到的都是anscii乱码,但是我用python3是可以得到1241这结果的,陷入了沉思… …
问题没有得到解决,我又翻各种资料,我看着在线进制转换,反查1241得到16进制为0x04d9,我仔细的看这两者之间的关系,忽然把目光放到了二进制上面。
04的二进制是 0000 0100
d9的二进制是 1101 1001
而04d9 则是 0000 010011011001 这时候的十进制是:1241
于是,这结果不就对了嘛!
高位和代位相差8位,只要把高位的数据向左移8位,然后相加就可以了
于是:
let temp =‘AAAE2X==’
let arr_len= 3;
let temp_data = base64ToArrayBuffer(temp,4)
for(var i=0;i<temp_data.length;i++){
arr_t = (arr_t+decodeStr[i]<<(arr_len-i)*8) >>> 0
// >>> 0 这是把有符号整数转为无符号整数
}
console.log('转换成整数的结果:',arr_t)
总结
提示:这里对文章进行总结:
例如:以上就是一个早上搞出来的,做为笔记记录。