js字符与16进制相互转换

小知识 09-23 18:36

当想把字符隐藏的时候,可以把字符转换为十六进、二进制,经过几次相互间的转换,或许就看不出原形了。再次,如果把中文也进行加密,更少不了要转换为十六进制。下面就来探讨怎么把字符串转换为十六进制和怎么把十六进制转换为字符串。

在 js 中,字符串转为十六进制有两种方法,一种先把字符串转为 Unicode 字符,再转为十六进制,最后截取四位;另一种直接用 parseInt() 方法转换,但只能转换 String 类型。

1、字符串转换为十六进制

转换主要通过 charCodeAt()方法实现,该方法返回一个字符的 Unicode 值,此字符用于指定索引位置。接着用 toString(16) 把 Unicode 值转为十六进制,最后用 slice(-4) 从右边截取四位。

function stringToHex(str) {
  var arr = [];
  for (var i = 0; i < str.length; i++) {
    arr[i] = ("00" + str.charCodeAt(i).toString(16)).slice(-4);
  }
  return "u" + arr.join("u");
}

调用方法:

var str = "strToHex";
stringToHex(str);//输出:u0073u0074u0072u0054u006fu0048u0065u0078

2、十六进制转换为字符串

主要通过 replace() 和 unescape() 方法实现,首先用 replace() 把字符串中所有用%取代,然后用 unescape() 把所有 %uxxxx 格式编码的字符(Unicode 字符)用十六进制编码 xxxx 格式的 Unicode 字符代替。

function hexToString(str) {
  return unescape(str.replace(//g, "%"));
}

调用方法:

var str = "u0073u0074u0072u0054u006fu0048u0065u0078";
hexToString(str);//输出:strToHex

3、用 parseInt() 方法转换

parseInt(string, radix) 方法只能转换 String 类型,对其它类型都返回 NaN(非数字);string(必选参数) 表示待转换的字符,radix(可选参数) 表示要转为的进制,值介于 2 ~ 36 之间,省略则表示转为十进制。

举例:

parseInt("ac", 16); //表示把字符串 ab 转换为16进制,结果:172
parseInt("12", 8); //表示把字符串 12 转换为8进制,结果:10
parseInt("10", 2); //表示把字符串 10 转换为2进制,结果:2