我正在尝试弄清楚Java中的十六进制字符串转字节数组函数如何生成正确的二进制数,而JavaScript则得出完全不同的结果。
JavaScript
Java:
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte)
((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16));
}
return data;
}
JavaScript
this.hexStringToByteArray = function(s) {
var len = s.length;
var data = [];
for(var i=0; i<(len/2); data[i++]=0) {}
for (var i = 0; i < len; i += 2) {
data[i / 2] = (parseInt(s.charAt(i), 16) << 4)
+ parseInt(s.charAt(i+1), 16);
}
return data;
};
Java:
Java:
"a3" = -93;
JavaScript:"a3" = 163;
如果没有(byte)的转换,Java会生成与javascript相同的数字。如果无法将变量指定为字节,则如何使javascript生成与Java相同的数字(正数或负数)呢?