【问题标题】:How can I convert an Array of ASCII numbers back to their char value using JavaScript?如何使用 JavaScript 将 ASCII 数字数组转换回它们的 char 值?
【发布时间】:2018-03-27 10:59:34
【问题描述】:

我已经使用 string.charCodeAt() 将字符串转换为它们的 ascii,但是现在我已经完成了添加/减去值,我想将它们从 ASCII 转换回字母和字符串。

我希望将以下数组转换回它们的字符字母,并最终使用 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));
}

【问题讨论】:

  • String.fromCharCode.apply(String, asciiKeys)
  • 你认为0.fromCharCode(0) 中做了什么?这本身看起来是错误的,即使数字没有.fromCharCode() 方法这一事实除外。

标签: javascript arrays string ascii


【解决方案1】:

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,或者退回到可靠的旧循环并进行一对一处理。

【讨论】:

  • 请注意,在大序列上,可能需要循环,因为 max number of arguments apply 可以接受。
  • @Kaiido 好点!但是,我不会修改答案,而是将其留给实施者去发现(和/或阅读您的评论),因为情境是关键。
  • 公平地说,在处理二进制操作时这很常见,使用这个速记时我们很难调试RangeError
  • @GauchoRoger 如果它有效,那么也许接受最能回答您的问题的答案?
  • @GauchoRoger 您可以单击答案旁边的复选标记以接受它stackoverflow.com/tour
【解决方案2】:

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

String.fromCharCode.apply(String, asciiKeys)

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

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]);

【讨论】:

    【解决方案3】:

    在现代浏览器(不是 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))

    【讨论】:

      猜你喜欢
      • 2011-01-13
      • 1970-01-01
      • 2017-12-23
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      相关资源
      最近更新 更多