javascript - 如何使用JavaScript将字符串转换为数值(应该是可逆的)?

标签 javascript string

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

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

最佳答案

字符串和数字:

字符串可以描述为带有编码的一系列字节。这导致显示字符而不是字节值。

要获取某个字符的字符代码,可以在字符串上调用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"

编码字符串值:

现在,您完全有可能希望支持不是数组的东西(一个反射(reflect)整个单词的数字字符串)。为此,您需要与存储集合中最大值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)。

要将十六进制代码反转为原始字符串,您只需要将字符串分成两对,然后将它们转换回以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;
}, "");

关于javascript - 如何使用JavaScript将字符串转换为数值(应该是可逆的)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21057156/

相关文章:

java - 如何在 Java 中更改字符串两次(基于之前的更改)? (里面的代码)

javascript - 单击缩略图不会更改 flexslider 幻灯片

javascript - 函数参数未定义 - Javascript

javascript proj4js问题

html - Angular 2 中的字符串最佳实践

python - 在python中获取2个字符之间的字符串

Ruby 将 CSV 文件读取为 UTF-8 和/或将 ASCII-8Bit 编码转换为 UTF-8

javascript - javascript 中的字符串

javascript - 无法删除最后一个前置对象

javascript - 查看不应该更新的时候