我正在做关于此的任务。
对于Eaxmple: 我有一条消息(字符串),长度是以dec为单位的302,以十六进制为12e。
String message = "THE MESSAGE BODY";
int lengthOfMessage = number.length(); // 302
String lengthOfMessageInHex = Integer.toHexString(lengthOfMessage); // 12e
现在,我需要将lengthOfMessageInHex从“12e”更改为“0000012e”。
lengthOfMessageInHex = ("00000000" + lengthOfMessageInHex)
.substring(lengthOfMessageInHex.length()); // 0000012e
现在我想将00 00 01 2e存储到一个新的字节[4]。
我该怎么做?
谢谢。
答案 0 :(得分:2)
如果您有原始整数,为什么不只是使用那个而不是字符串,如:
byt[0] = lengthOfMessage / 16777216; // most significant.
byt[1] = (lengthOfMessage % 16777216) / 65536;
byt[2] = (lengthOfMessage % 65536) / 256;
byt[3] = lengthOfMessage % 256; // least significant.
如果出于某种原因, 无法访问原始整数(如果字符串存储在文本文件中或通过网络发送),则可以使用parseInt
在使用上述方法之前获取整数:
string s = "0000012eRestOfMessage";
int x;
try {
x = Integer.parseInt (s.substring (0,8), 16);
} catch (Exception e) {}
或者,您可以完全绕过中间步骤:
string s = "0000012eRestOfMessage";
byte byt[4];
try {
for (int i = 0; i < 4; i++) {
int x = Integer.parseInt (s.substring (i*2,2), 16);
byt[i] = (byte)((x > 127) ? x - 256 : x);
}
} catch (Exception e) {}
答案 1 :(得分:0)
我想我更喜欢paxdiablo的解决方案,但是可以通过用短串2(例如00 00 01 2e = 4个单独的字符串)切割字符串并使用Byte.valueOf(String s, int radix)来创建一个替代方案。字节,然后在该字节上使用byteValue()来获取字节。
答案 2 :(得分:0)
我会这样做......
byte[] byt = new byte[4];
byt[0] = Byte.parseByte(lengthOfMessageInHex.substring(0, 2), 16);
byt[1] = Byte.parseByte(lengthOfMessageInHex.substring(2, 4), 16);
byt[2] = Byte.parseByte(lengthOfMessageInHex.substring(4, 6), 16);
byt[3] = Byte.parseByte(lengthOfMessageInHex.substring(6, 8), 16);