如果我有一个十六进制数,占用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]);
答案 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,因为它是一个字节的大小。
希望这能回答你的问题。