【问题标题】:Convert Ascii value directly to Hex value将 Ascii 值直接转换为 Hex 值
【发布时间】:2015-05-14 12:48:45
【问题描述】:

我有一个由十六进制字母组成的文字字符串,例如00bff040dadd1fde55,我希望将字符串转换为以字节为单位的十六进制“等效”,即转换为字节数组,例如{0x00 0xBF 0xF0 0x40 0xDA 0xDD 0x1F 0xDE 0x55}

是否有可以进行这种转换的 Java 类?如果没有,是否有人有我可以实现的算法来进行上述转换?

【问题讨论】:

    标签: java hex


    【解决方案1】:

    是否有可以进行这种转换的 Java 类?

    标准库中没有将包含十六进制字符的字符串转换为字节数组的类......就像那样1

    如果没有,是否有人有我可以实现的算法来进行上述转换?

    1. 将字符串的长度除以 2,然后分配该大小的字节数组。
    2. 重复直到字符串为空:

      1. 删除包含前两个字符的子字符串。
      2. 使用Integer.parseInt(twoChars, 16) 转换为整数。
      3. 将整数转换为字节并添加到字节数组中。

    这个算法可以很容易地转换成 Java 代码。


    1 - 如果您确实想要将字节“文字”序列表示为字符串,请查看@aetheria 的答案...

    【讨论】:

      【解决方案2】:

      如果你的意思是要将字符串分隔成十六进制的字节,你可以使用正则表达式:

      String s = "00bff040dadd1fde55";
      String hex = "{" + s.toUpperCase().replaceAll("(..)", "0x$1 ").trim() + "}";
      System.out.println(hex);
      

      打印:

      {0x00 0xBF 0xF0 0x40 0xDA 0xDD 0x1F 0xDE 0x55}
      

      如果您的意思是要生成一个字节数组:

      int size = s.length() / 2;
      byte[] arr = new byte[size];
      for (int i = 0; i < size; i++) {
          arr[i] = (byte) Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16);
      }
      

      证明数组包含正确的字节:

      for (int i = 0; i < arr.length; i++) {
          System.out.print(String.format("%02X ", arr[i]) + " ");
      }
      

      打印:

      00  BF  F0  40  DA  DD  1F  DE  55  
      

      【讨论】:

      • 虽然这是正确的,而且我认为这个问题相当令人困惑,但我认为它要求转换为字节数组,而不是一串格式整齐的字节值。
      • 是的,我不确定。我添加了两个不同的结局。希望他们中的一个会幸福。
      • @aetheria 是的,我想要一个字节数组。我已经编辑了这个问题以明确这一点。感谢您的示例代码!
      猜你喜欢
      • 2011-02-12
      • 2019-09-13
      • 2015-10-30
      • 1970-01-01
      • 2019-06-13
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      相关资源
      最近更新 更多