请问一下,这一个JavaScript函数的输出结果可逆吗,如果有,有没有伙计可以帮我实现一下逆的过程
这个是输入
这个是输出
这个是js函数代码
function ToUTF16(str) {
var result = new Array();
var k = 0;
for (var i = 0; i < str.length; i++) {
var j = str[i].charCodeAt(0);
result[k++] = j & 0xFF;
result[k++] = j >> 8;
}
return result;
}
你题目的解答代码如下:(如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮)
function ToUTF16(str) {
var result = new Array();
var k = 0;
for (var i = 0; i < str.length; i++) {
var j = str[i].charCodeAt(0);
result[k++] = j & 0xFF;
result[k++] = j >> 8;
}
return result;
}
var arr = ToUTF16("大家好!");
console.log(arr);
function DeToUTF16(arr) {
var result = "";
for (var i = 0; i < arr.length; i+=2) {
var n = arr[i] + (arr[i+1] << 8);
result += String.fromCharCode(n);
}
return result;
}
var str = DeToUTF16(arr);
console.log(str);
这是先用str[i].charCodeAt(0)获取一个字符串的双字节字符编码。
把它分解成低位字节j & 0xFF 和高位字节 j >> 8 两个数值放到数组中,
反向解码就是每次从数组中取低位字节和高位字节两个数值,
将高位字节数值 << 8左移8个二进制位,再加上低位字节数值就还原成双字节的字符编码。
之后用String.fromCharCode(n)把双字节的字符编码转回为字符。
肯定可逆,不然后端无法获取正确内容
str[i].charCodeAt(0)相反函数为str[i].charAt(0)
&0xff只是对其最低8位的复制,这个操作可以输出j和j & 0xFF的结果对比一下
‘>>是移位运算符,,用对应的<<‘’’
遍历结束之后,return decodeURIComponent(str)
可逆,把一个字符 拆成高/低两个。 建议尝试 查看一下 javascript 的手册,理解一下每一句代码,然后有什么不理解的地方贴出大家一起讨论。