- JavaScript 用 toString(16) 将十进制转换成十六进制。
- ASP(VBScript)用 Hex 将十进制转换成十六进制。
二者在正数表现上无实质区别,只是一个是小写,一个是大写;但对待负数就有区别了。
JavaScript 结果是在负数绝对值的十六进制前加负号。
var n = -10;
alert(n.toString(16)); // 结果为 -a,注意是小写。
ASP(VBScript)将补码看作是无符号的十六进制。
alert(hex(-10)) ' 结果为 FFF6,注意是大写。
10 的字节是 0000 0000 0000 1010,负数用补码表示,那么它的补码是:
- 符号位为 1:1000 0000 0000 1010
- 其他位为该数绝对值原码按位取反:1111 1111 1111 0101
- 加 1:1111 1111 1111 0110
而 1111 1111 1111 0110 对应于十六进制就是 FFF6。
如何让 JavaScript 的表现和 ASP(VBScript)相同呢?
var m = -10 + 65535 + 1;
alert(m.toString(16)); // 结果为 fff6,注意是小写。