我已经使用string.charCodeAt()将字符串转换为ascii,但现在我已经完成了添加/减去我想要将它们从ASCII转换回字母和字符串的值。
我希望将以下数组转换回char字母,最后使用JavaScript转换为字符串。
asciiKeys= [70, 69, 69, 69, 32, 67, 66, 68, 69, 32, 67, 65, 77, 67];
我尝试使用以下内容,但它一直声明它不是一个函数:
for (var j=0;j<str.length;j++){
newAsciikeys.push(asciiKeys[j].fromCharCode(0));
}
答案 0 :(得分:3)
fromCharCode
是String
上的静态函数。因此,这将满足您的需求,而无需循环:
reconstituted = String.fromCharCode.apply(null, asciiKeys);
apply
函数是将一个项目数组发送到函数的方式,就像您手动输入每个参数一样。例如,String.fromCharCode( asciiKeys[0], asciiKeys[1], asciiKeys[2], asciiKeys[3], ... )
(请注意,我假设您不需要中间字符数组,此解决方案直接转到您请求的最终字符串。如果您还需要中间字符数组,则可以将结果数组拆分为reconstituted.split('')
。)
为了健壮,请注意.apply
对其可以处理的参数数量(读取:数组大小)具有JS引擎特定的限制。要处理这些情况,consider splitting up your work,或者通过逐个处理回退到可靠的旧循环。
答案 1 :(得分:1)
数组中的值需要传递给.fromCharCode()
; .fromCharCode()
不是.charCodeAt()
String.fromCharCode.apply(String, asciiKeys)
或者,您可以使用TextDecoder()
将数组的ArrayBuffer
表示形式转换为字符串。如果预期结果是数组,则可以使用spread元素将字符串转换为数组。
var asciiKeys = [70, 69, 69, 69, 32, 67, 66, 68, 69, 32, 67, 65, 77, 67];
var str = new TextDecoder().decode(Uint8Array.from(asciiKeys));
console.log(str, [...str]);
&#13;
答案 2 :(得分:0)
在现代浏览器(不是IE)上,可以使用Spread syntax:
缩短它
s = "ABC", j = JSON.stringify
a = [...s].map(s => s.charCodeAt()) // string to array ( [...s] is short for s.slice() )
r = String.fromCharCode(...a) // array to string ( (...a) is short for .apply(0, a) )
console.log(j(s), j(a), j(r))