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

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

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

  1. String s = "ABOL1";

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

我试着遵循代码,但是 Byte.decode 字符串太大时出错,如“4f”或“4c”。有没有其他方法可以转换它?

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

px9o7tmv1#

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

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

kxe2p93d2#

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

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

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

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

bweufnob3#

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

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

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

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

aij0ehis4#

javadoc的byte.decode()指定十六进制数应该在表单上 "0x4C" . 因此,要消除异常,请尝试以下操作:

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

还有一种更简单的转换方法,因为string类有一个将字符串转换为字节的方法:

  1. bytes = s.getBytes();

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

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

相关问题