Java整数到十六进制和int

时间:2015-06-03 06:44:09

标签: java integer hex type-conversion

我遇到问题,该方法无法按预期工作。在大多数情况下它都有效。但是有一种情况它不起作用。 我有一个包含一些值的字节数组。例如:0x04 0x42(littleEndian)。如果我使用convertTwoBytesToInt方法,我会得到一个非常小的数字。它应该是> 16000而不小于2000。

我有两种方法:

private static int convertTwoBytesToInt(byte[] a){
    String f1 = convertByteToHex(a[0]);
    String f2 = convertByteToHex(a[1]);
    return Integer.parseInt(f2+f1,RADIX16);
}

private static byte[] convertIntToTwoByte(int value){
    byte[] bytes = ByteBuffer.allocate(4).putInt(value).array();
    System.out.println("Check: "+Arrays.toString(bytes));
    byte[] result = new byte[2];
    //big to little endian:
    result[0] = bytes[3];
    result[1] = bytes[2];
    return result;
}

我称他们如下:

    byte[] h = convertIntToTwoByte(16000);
    System.out.println("AtS: "+Arrays.toString(h));
    System.out.println("tBtInt: "+convertTwoBytesToInt(h));

如果我使用值16000,则没有问题,但如果我使用16900,则“convertTwoBytesToInt”的整数值为1060.

任何想法?

1 个答案:

答案 0 :(得分:0)

根据您提供的示例,我的猜测是convertByteToHex(byte)在字节值小于0x10时转换为单位十六进制字符串。 16900是0x4204,1060是0x424。

您需要确保转换为零填充为两位数。

一种更简单的方法是使用位操作从字节构造int值:

private static int convertTwoBytesToInt(byte[] a) {
    return ((a[1] & 0xff) << 8) | (a[0] & 0xff);
}