有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想将单个字符的字符串转换为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);
}                

共 (4) 个答案

  1. # 1 楼答案

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

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

    bytes[i] = (byte)array[i];
    
  2. # 2 楼答案

    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);
    }
    
  3. # 3 楼答案

    可以使用String.format()char转换为十六进制String

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

    或者威胁char作为int并使用:

    String hex = Integer.toHexString((int) array[i]);
    
  4. # 4 楼答案

    你有什么理由要检查绳子吗?因为你可以这么做:

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

    甚至用以下代码替换所有这些代码:

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