4

javascriptがまったく異なるものを思いついたときに、javaのhexstringからbytearrayへの関数が正しい2進数を生成する方法を理解しようとしています。

ジャワ

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;

};

ジャワ:

"a3" = -93;

Javascript:

"a3" = 163;

(バイト) キャストがないと、Java は JavaScript と同じ数値を生成します。特定の変数をバイトにすることができない場合、javascriptにJavaと同じ数値(正または負)を生成させるにはどうすればよいですか?

4

1 に答える 1

3

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;

};
于 2013-08-08T00:07:22.817 に答える