我试图弄清楚 java 中的 hexstring to bytearray 函数是如何生成正确的二进制数的,而 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 :
"a3"= -93;
Javascript:
"a3"= 163;
没有 (byte) 转换,Java 生成与 javascript 相同的数字。如果不能将特定变量作为字节,我如何使 javascript 生成与 Java 相同的数字(正数或负数)?
最佳答案
如果您想要生成与 Java 相同的结果,那么您需要使您的数字在 [-128, 127] 范围内。尝试这样的事情:
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) {
var value = (parseInt(s.charAt(i), 16) << 4)
+ parseInt(s.charAt(i+1), 16);
// "transforms" your integer to the value a Java "byte" would have:
if(value > 127) {
value -= 256;
}
data[i / 2] = value;
}
return data;
};
关于java - 十六进制字符串到 ByteArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18115818/