如何使用JavaScript将ASCII数组转换回char值?

时间:2017-10-16 00:53:05

标签: javascript arrays string ascii

我已经使用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));
}

3 个答案:

答案 0 :(得分:3)

fromCharCodeString上的静态函数。因此,这将满足您的需求,而无需循环:

reconstituted = String.fromCharCode.apply(null, asciiKeys);

apply函数是将一个项目数组发送到函数的方式,就像您手动输入每个参数一样。例如,String.fromCharCode( asciiKeys[0], asciiKeys[1], asciiKeys[2], asciiKeys[3], ... )

(请注意,我假设您不需要中间字符数组,此解决方案直接转到您请求的最终字符串。如果您还需要中间字符数组,则可以将结果数组拆分为reconstituted.split('')。)

编辑:(感谢@Kaiido)

为了健壮,请注意.apply对其可以处理的参数数量(读取:数组大小)具有JS引擎特定的限制。要处理这些情况,consider splitting up your work,或者通过逐个处理回退到可靠的旧循环。

答案 1 :(得分:1)

数组中的值需要传递给.fromCharCode(); .fromCharCode()不是.charCodeAt()

String.fromCharCode.apply(String, asciiKeys)

或者,您可以使用TextDecoder()将数组的ArrayBuffer表示形式转换为字符串。如果预期结果是数组,则可以使用spread元素将字符串转换为数组。

&#13;
&#13;
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;
&#13;
&#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))