如何在java中将十六进制字符串更改为4字节?

如何在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”更

我正在做一个关于这个的作业

对于EAX示例: 我有一条消息(字符串),长度是302(十进制),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的建议,并将其实现为您的代码。非常感谢。