gpt4 book ai didi

java - ByteBuffer 以及十进制和十六进制之间的转换

转载 作者:行者123 更新时间:2023-12-02 02:31:44 42 4
gpt4 key购买 nike

我想要做的是获取一个十进制整数,将其转换为十六进制,然后分隔字节。

据我了解,ByteBuffer 是实现此目的的最佳方法。整数不会超过65535,因此十六进制数保证为2个字节。例如,我有一个整数 40000(十六进制值 9C40)。

int n1 = 40000;
ByteBuffer b = ByteBuffer.allocate(2);
b.putInt(n1);

但是,当我运行程序时,出现以下错误:

Exception in thread "main" java.nio.BufferOverflowException

我做错了什么? 9C40 不应该写入 b (其中 b[0] = 9C 且 b[1] = 40)吗?

此外,一旦我克服了这个问题,如果我想将 b[0] 中存储的值(即 9C)转换为十进制(即 156),我是否可以使用以下内容代码?

int n2 = b.get(0);

最佳答案

当您使用 ByteBuffer 时,它存储 x 个分配的字节数。现在您分配了 2 个字节,并尝试存储大小为 4 个字节的数据类型。因此缓冲区将超出消息所述的范围。如果您想将此数据存储在两个字节大小的缓冲区中,您可以使用短缓冲区(16 位 - 2 字节)或为 ByteBuffer 分配 4 个字节。

短:

ByteBuffer bb = ByteBuffer.allocate(2);
short myShort = (short) 40000;
bb.putShort(myShort);
System.out.println(String.format("%02X, %02X", bb.get(0), bb.get(1)));

使用整数:

ByteBuffer bb = ByteBuffer.allocate(4);
int myInt = 40000;
bb.putInt(myInt);
System.out.println(String.format("%02X, %02X", bb.get(2), bb.get(3)));

输出:9C,40

关于java - ByteBuffer 以及十进制和十六进制之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46987738/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com