如何在java中将十六进制字符串更改为4字节?
我正在做一个关于这个的作业 对于EAX示例: 我有一条消息(字符串),长度是302(十进制),12e(十六进制)如何在java中将十六进制字符串更改为4字节?,java,Java,我正在做一个关于这个的作业 对于EAX示例: 我有一条消息(字符串),长度是302(十进制),12e(十六进制) String message = "THE MESSAGE BODY"; int lengthOfMessage = number.length(); // 302 String lengthOfMessageInHex = Integer.toHexString(lengthOfMessage); // 12e 现在,我需要将lengthOfMessageInHex从“12e”更
String message = "THE MESSAGE BODY";
int lengthOfMessage = number.length(); // 302
String lengthOfMessageInHex = Integer.toHexString(lengthOfMessage); // 12e
现在,我需要将lengthOfMessageInHex从“12e”更改为“0000012e”
现在我想把00012e存储到一个新字节[4]
我该怎么做
谢谢。如果您有原始整数,为什么不使用它而不是字符串,例如:
byt[0] = lengthOfMessage / 16777216; // most significant.
byt[1] = (lengthOfMessage % 16777216) / 65536;
byt[2] = (lengthOfMessage % 65536) / 256;
byt[3] = lengthOfMessage % 256; // least significant.
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) {}
如果由于某种原因您无法访问原始整数(如果字符串存储在文本文件中或通过网络发送),则可以在使用上述方法之前使用parseInt
获取整数:
string s = "0000012eRestOfMessage";
int x;
try {
x = Integer.parseInt (s.substring (0,8), 16);
} catch (Exception e) {}
或者,您可以使用以下方法完全绕过中间步骤:
byt[0] = lengthOfMessage / 16777216; // most significant.
byt[1] = (lengthOfMessage % 16777216) / 65536;
byt[2] = (lengthOfMessage % 65536) / 256;
byt[3] = lengthOfMessage % 256; // least significant.
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) {}
string s=“0000012eRestOfMessage”;
字节byt[4];
试一试{
对于(int i=0;i<4;i++){
intx=Integer.parseInt(s.substring(i*2,2),16);
byt[i]=(字节)((x>127)?x-256:x);
}
}捕获(例外e){}
我想我更喜欢paxdiablo的解决方案,但另一种方法是将字符串分成2个短字符串(例如00 00 01 2e=4个单独的字符串),然后使用创建一个字节,然后在该字节上使用byteValue()来获取字节。我只想这样做
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);
lengthOfMessage是一个整数,我不能把它改成字节。你不是把lengthOfMessage变成整数,而是对它进行计算,得到小于256的位。然后您可以将它们转换为一个字节,记住您可能需要将0..255映射到0..-1。字节中的“基数”。valueOf(String s,int-radix)将给出16或其他?是的,我遵循了extraneon的建议,并将其实现为您的代码。非常感谢。