0

可能重复:
Java 整数到字节数组

这是另一个与下面的原始问题仍然相关的问题:

如果我有一个占用 4 个字符(2 个字节)的十六进制数,另存为整数。例子:

int value = 0xFFFF;

这在 java 中将使它成为一个 4 字节的十六进制,其中 2 个字节完全为空。

我怎样才能只抓取有数据的两个字节?

非常感谢您的帮助!:)

回答我的第二个问题:

md_5 在下面发布了更好的答案。

因此,要获得包含数据的 SINGLE 字节,您可以简单地执行以下操作:

byte b1 = (byte) ((i >> 8) & 0xFF); 
byte b2 = (byte) i & 0xFF 

如果整数范围内的数字更大,则只需执行 b1 = i >> 24、b2 = i >> 16 等。从移位中减去 8,因为这是一个字节的大小。

另一种方法使用原始问题的答案:

int hex = 0xF15E;
byte[] bytes = ByteBuffer.allocate(4).putInt(hex).array();
for(int i = 0; i < 4; i++) {
    System.out.format("0x%X ", bytes[i]);
}

输出:

0x0 0x0 0xF1 0x5E

所以然后取重要的字节:

byte[] importantBytes = {bytes[2], bytes[3]};

原始问题:

由于能够将 Integer 转换为 byte[],这个问题可能已经过时,但这里是:

如何将整数转换为具有前导 0 的十六进制?

所以如果我有整数:4096,十六进制就是 00001000。

总体目的是然后将此格式化的十六进制字符串转换为 byte[] (然后将其保存),但我认为我可以通过上述方式做到这一点。

但是仍然......我们如何将此整数转换为格式化的十六进制字符串?这甚至实用吗?

首选语言是 Java,我查看了 Integer.toHexString()。

我最初需要的工作解决方案:

int value = 2147483647;
byte[] bytes = ByteBuffer.allocate(4).putInt(value).array();

for(int i = 0; i < 4; i++)
System.out.format("0x%X ", bytes[i]);
4

2 回答 2

2

尝试使用Formatter,或它的便利包装之一,String.format 例如:

String str = String.format("%08x", val);

这会给你一个String,但我会把它留给你把它变成一个byte[]......

于 2013-01-12T21:20:25.527 回答
1

关于你的新问题(获取有数据的字节),你说它占用 2 个字节是错误的,0xFF 实际上可以打包成一个字节。Long/Double - 8 个字节 Integer/Float - 4 个字节 Short - 2 个字节 Byte - 1 个字节

因此,要获得包含数据的 SINGLE 字节,您可以简单地执行以下操作: byte single = (byte) i & 0xFF 如果您有一个更大的数字,最高可达 65535 (0xFFFF),您可以这样做: byte b1 = (byte) ((i >> 8) & 0xFF); byte b2 = (byte) i & 0xFF 如果您在整数范围内有更大的数字,您只需执行 b1 = i >> 24 , b2 = i >> 16 等等等等。从移位中减去 8,因为这是一个字节的大小。

希望这能回答你的问题。

于 2013-01-13T03:58:58.413 回答