java - 十六进制字符串到 ByteArray

标签 java javascript string hex

我试图弄清楚 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/

相关文章:

java - 编辑 Java 类所有属性值的注释

Java - 检查变量是否等于任何数组元素

java - Android Studio 中的条件问题

javascript - Jquery加载特定div使按钮不起作用

javascript - Ember JS组件多个复选框选择数组

javascript - 在使用 RSA-OAEP 在 JavaScript 中加密的 C# 中解密数据时出现 OAEP 填充错误

python - 从一个字符串和一个字符串列表创建一个元组

python - python中字符串的打印长度

ruby - 如何找到字符串的最长重复序列

java - 在同步代码段中使用 wait() 而不使用 notification() (java)