2012-06-06 61 views
0

在Java中,我試圖解碼由下面的Ruby代碼寫的整數相當於Java Ruby的String.unpack爲「Q *」

def int_to_hex_string(i) 
    [i].pack('q').reverse 
end 

對於數字42,得到的字符串會"\x00\x00\x00\x00\x00\x00\x00*"

以下Ruby代碼將扭轉過程:

def hex_string_to_int(s) 
    s.reverse.unpack('q*').first 
end 

我如何可以模擬在Java中這最後的方法是什麼?

回答

3

更新:最簡單的方法是使用java.math.BigInteger中:

return new BigInteger(bytes).intValue(); 

或者,如果人真的想實現它自己:

public static int unpackInteger(byte[] bytes) { 
    int sum = 0; 
    int mul = 1; 

    for (int i=bytes.length-1; i >= 0; i--) { 
     sum += (mul * (bytes[i] & 0xff)); 
     mul <<= 8; 
    } 
    return sum; 
}