Java字符串,将单个字符转换为十六进制字节

11

我想将一个由单个字符组成的字符串转换为5个十六进制字节,其中每个字节表示一个十六进制数:

例如:

String s = "ABOL1";

byte[] bytes = {41, 42, 4F, 4C, 01}

我尝试了以下代码,但是当字符串太大时(例如“4F”或“4C”),Byte.decode报错了。是否有其他方法可以进行转换?

我尝试使用这段代码,但是当字符串太大时,Byte.decode会出现错误,例如 "4F" 或 "4C"。是否有其他的转换方法可用?

String s = "ABOL1";
char[] array = s.toCharArray();
for (int i = 0; i < array.length; i++) {
  String hex = String.format("%02X", (int) array[i]);
  bytes[i] = Byte.decode(hex);
}                

1
一个 char 不是一个 byte - fge
1
不存在所谓的“十六进制字节”。数据已经是您需要的格式。只需复制这些字节即可。 - user207421
4个回答

5

你为什么要通过字符串来实现?你可以直接这样做:

bytes[i] = (byte) array[i];

甚至可以用以下代码替换所有内容:
byte[] bytes = s.getBytes(StandardCharsets.US_ASCII);

3
您可以使用String.format()char转换为十六进制String
String hex = String.format("%04x", (int) array[i]);

或将char作为int处理,并使用以下代码:

String hex = Integer.toHexString((int) array[i]);

2

使用String hex = String.format("0x%02X", (int) array[i]);来指定带有0x前缀的十六进制数字。

更好的解决方案是直接将int转换为byte

bytes[i] = (byte)array[i];

-1

Byte.decode() javadoc 指定十六进制数应该采用如下形式:"0x4C"。所以,要想消除异常,请尝试以下操作:

String hex = String.format("0x%02X", (int) array[i]);

可能还有一种更简单的方法来进行转换,因为String类有一个将字符串转换为字节的方法:

bytes = s.getBytes();

或者,如果您想要将其原始转换为字节数组:

int i, len = s.length();
byte bytes[] = new byte[len];
String retval = name;
for (i = 0; i < len; i++) {
    bytes[i] = (byte) name.charAt(i);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接