将int或long转换为字节十六进制数组

时间:2015-02-16 15:29:43

标签: java

将整数或长值转换为字节缓冲区的最简单方法是什么?

示例:

输入:325647187

输出:{0x13,0x68,0xfb,0x53}

我尝试过像这样的ByteBuffer:

ByteBuffer buffer = ByteBuffer.allocate(4);
buffer.putLong(325647187);

byte[] x=buffer.array();

for(int i=0;i<x.length;i++)
{
    System.out.println(x[i]);
}

但我得到例外

Exception in thread "main" java.nio.BufferOverflowException
    at java.nio.Buffer.nextPutIndex(Buffer.java:527)
    at java.nio.HeapByteBuffer.putLong(HeapByteBuffer.java:423)
    at MainApp.main(MainApp.java:11)

2 个答案:

答案 0 :(得分:6)

您分配了一个4字节缓冲区,但在调用putLong时,您尝试在其中放入8个字节。因此溢出。调用ByteBuffer.allocate(8)可以防止异常。

或者,如果编码的数字是整数(如在您的代码段中),则它足以分配4个字节并调用putInt()

答案 1 :(得分:0)

您可以尝试这种方式以便更轻松地进行转换:

所以你有325647187作为你的输入,我们可以有这样的东西

byte[] bytes = ByteBuffer.allocate(4).putInt(325647187).array();

for (byte b : bytes) 
{
System.out.format("0x%x ", b);
}

对我而言,这是(如果不是最多)转换为字节缓冲区的有效方法。