如何将整数转换为格式化的4字节十六进制(带前导0)

时间:2013-01-12 21:18:55

标签: java integer hex formatted

  

可能重复:
  Java integer to byte array

以下是与原作相关的另一个问题:

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

int value = 0xFFFF;

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

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

非常感谢帮助! :)

回答我的第二个问题:

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

  

因此,要获得具有数据的SINGLE字节,您可以简单地执行:byte single   =(字节)i& 0xFF如果您有一个更大的数字,最高可达65535(0xFFFF),您可以这样做:

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

如果你在整数范围内有一个更大的数字,你只需要做b1 =   我>> 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]};

原始问题:

由于能够将整数转换为字节[],这个问题可能已经过时了,但这里有:

如何将整数转换为具有前导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]);

2 个答案:

答案 0 :(得分:2)

尝试使用Formatter或其中一个便利包装器,例如String.format,例如:

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

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

答案 1 :(得分:1)

关于你的新问题(获取具有数据的字节),你说它占用2个字节是错误的,0xFF实际上可以打包成一个字节。 长/双 - 8个字节 整数/浮点数 - 4个字节 短 - 2个字节 字节 - 1个字节

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

希望这能回答你的问题。