代码之家  ›  专栏  ›  技术社区  ›  arunmmanoharan

将ASCII编码的字符串转换为普通字符串-javascript

  •  -1
  • arunmmanoharan  · 技术社区  · 6 年前

    我有一个ASCII字符串,需要将其转换为普通字符串。

    var asciiString = '84114117116104326510811997121115328710511011532'
    
    function strFunc(str) {
        var result = []
    
        var strSplit = str.split('');
    
        var validAscii = ['32'];
        for(var i=65; i<=90; i++) {
            validAscii.push(i.toString());
        }
        for(var i=97; i<=122; i++) {
            validAscii.push(i.toString());
        }
        strSplit.forEach((item, index) => {
            if(validAscii.includes(parseInt(item))) {
                result.push(item)
            } else if (validAscii.includes(`${parseInt(strSplit[index])}${parseInt(strSplit[index + 1])}`)){
                result.push(item)
            }
        })
        return result.fromCharCodeAt(...result)
    }
    
    console.log(strFunc(asciiString))

    为什么它返回空字符串?我需要将字符串拆分为2位或3位,并将其与我构建的数组进行比较。

    字符串应该拆分为[84,114,117,116,104,32,65,…],这意味着 真理… 请教。

    3 回复  |  直到 6 年前
        1
  •  1
  •   gman    6 年前

    const encodedString = '84114117116104326510811997121115328710511011532';
    const codes = [];
    for (let i = 0; i < encodedString.length;) {
      const numDigits = encodedString[i] === '1' ? 3 : 2;
      codes.push(encodedString.substr(i, numDigits));
      i += numDigits;
    }
    const str = String.fromCharCode(...codes);
    console.log(`"${str}"`);

    一些注释:

    • parseInt String.fromCharCode

    1. item validAscii result

    2. Array.fromCharCodeAt

      array.fromCharCodeAt String.fromCharCode(...result)

        2
  •  1
  •   Barmar    6 年前

    parseInt()

    } else if (validAscii.includes(parseInt(item + strSplit[index+1]))){
    

    else if item + strSplit[index+1] + strSplit[index+2]

    item 到结果字符串。但是要得到相应的字符,需要使用 String.fromCharCode() 将连接的ASCII代码转换为字符。

    strSplit.forEach((item, index) => {
      if (validAscii.includes(parseInt(item))) {
        result.push(String.fromCharCode(item))
      } else if (validAscii.includes(parseInt(item + strSplit[index+1]))) {
        result.push(String.fromCharCode(parseInt(item + strSplit[index+1]))
      } else if (validAscii.includes(parseInt(item + strSplit[index+1] + strSplit[index+2]))) {
        result.push(String.fromCharCode(parseInt(item + strSplit[index+1] + strSplit[index+2]))
      }
    })

    forEach 像这样可能不是个好主意。如果输入中有同时位于 validAscii 678 67 , and add the corresponding characters to the result. Instead, you should use an ordinary

        3
  •  0
  •   JohanP    6 年前

    你想要 parseInt 围绕模板化字符串,而不是单个项。您正在检查字符串是否包含在一个由数字填充的数组中。

    var asciiString = '84114117116104326510811997121115328710511011532'
    
    function strFunc(str) {
        var result = []
    
        var strSplit = str.split('');
    
        var validAscii = [32];
        for(var i=65; i<=90; i++) {
            validAscii.push(i);
        }
        for(var i=97; i<=122; i++) {
            validAscii.push(i);
        }
        strSplit.forEach((item, index) => {
            if(validAscii.includes(parseInt(item))) {
                result.push(item)
            } else if (validAscii.includes(parseInt(`${(strSplit[index])}${(strSplit[index + 1])}`))){
            
                result.push(item);
            }
        })
        return result.join('');
    }
    
    console.log(strFunc(asciiString))