java字符串,单字符到十六进制字节

gc0ot86w  于 2021-07-13  发布在  Java
关注(0)|答案(4)|浏览(433)

我想将一个字符串按单个字符转换为5个十六进制字节,一个字节表示十六进制数:
就像

String s = "ABOL1";

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

我试着遵循代码,但是 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);
}
px9o7tmv

px9o7tmv1#

使用 String hex = String.format("0x%02X", (int) array[i]); 指定十六进制数字的步骤 0x 在弦之前。
一个更好的解决办法是转换 int 进入 byte 直接:

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

kxe2p93d2#

你有什么理由试着穿过绳子吗?因为你可以这样做:

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

或者甚至将所有这些代码替换为:

byte[] bytes = s.getBytes(StandardCharsets.US_ASCII);
bweufnob

bweufnob3#

你可以从 char 到十六进制 String 带string.format():

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

或者威胁 char 作为一个 int 使用方法:

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

aij0ehis4#

javadoc的byte.decode()指定十六进制数应该在表单上 "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);
}

相关问题