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

Javascript:如何在可能的情况下将字符串转换为int?[副本]

  •  0
  • yarek  · 技术社区  · 7 年前

    如何将JavaScript字符串转换为唯一的数值,以便您可以将数值转换回字符串?数值的长度无关紧要。

    如果不可能,那么如何将字符串转换为数值(可逆或不可逆)?

    0 回复  |  直到 12 年前
        1
  •  7
  •   Gabriel    12 年前

    字符串和数字:

    要获取某个字符的字符代码,可以调用 charCodeAt 方法。

    "a".charCodeAt(0); // => 97
    "A".charCodeAt(0); // => 65
    

    97 + 65 = 162;
    String.fromCharCode(162); // => ¢
    

    var StringTools = {
      stringToNumbersArray: function(data){
        return data.split('').map(function(c){return c.charCodeAt(0);});
      },
      numbersArrayToString: function(arr){
        return arr.map(function(n){return String.fromCharCode(n)}).join('');
      }
    }
    
    StringTools.stringToNumbersArray("Hello");
    // => [72, 101, 108, 108, 111]
    StringTools.numbersArrayToString([72, 101, 108, 108, 111])
    // => "Hello"
    

    现在很有可能您想要支持的不是数组的东西(反映整个单词的单个数字字符串)。为此,您需要尽可能多的数字来存储集合中的最大值,即3。所以我们可以把这些数字组合成一个单一的数字,只要我们知道这个长度,然后我们可以把它们分开。

    [72, 101, 108, 108, 111].reduce(function(memo, n){
      return memo + ("000" + n).slice(-3);
    }, "");
    // => "072101108108111"
    

    但正如你所见,这不是一个实数,因为开头的0是一个有效数字。更常见 hexadecimal toString 方法,其中参数是基数(数字的基数,16表示十六进制)。

    [72, 101, 108, 108, 111].reduce(function(memo, n){
      return memo + ("00" + n.toString(16)).slice(-2);
    }, "");
    // => "48656c6c6f"
    

    如您所见,这为我们节省了一些字符,因为我们知道4位可以存储在一个16进制数(1111===15)中,因此您可以使用2个16进制数(16*16=256)获得完整的存储字节。

    要将十六进制代码反译为原始字符串,只需将字符串拆分为2对,并将其转换回以10为基数,然后使用 String.fromCharCode()

    "48656c6c6f".split("").reduce(function(result, c, idx, list){
      if (idx % 2 != 0) {
        result += String.fromCharCode(parseInt(list[idx-1] + c, 16));
      }
      return result;
    }, "");
    
        2
  •  1
  •   DutGRIFF    12 年前

    字符串实际上存储为数字。我们可以得到字符串中每个字母的ascii码,并将它们合并成一个大数字,强制每个数字为三位数字,这样我们就可以轻松地反转过程。

    function convertToNumber(str){
      var number = "";
      for (var i=0; i<str.length; i++){
        charCode = ('000' + str[i].charCodeAt(0)).substr(-3);
        number += charCode;
      }
      return number;
    }
    alert(convertToNumber("SO does my homework")); //console.log is better
    

    char.charCodeAt(0) 哪个是 String.fromCharCode(num) :

    function convertToString(numbers){
      origString = "";
      numbers = numbers.match(/.{3}/g);
      for(var i=0; i < numbers.length; i++){
        origString += String.fromCharCode(numbers[i]);
      }
      return origString;
    }
    alert(convertToString("083079032100111101115032109121032104111109101119111114107"));  //console.log is better