【问题标题】:Java String, single char to hex bytesJava字符串,单个字符到十六进制字节
【发布时间】:2015-07-06 23:18:31
【问题描述】:

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

【问题讨论】:

  • char 不是byte
  • 没有“十六进制字节”之类的东西。数据已经是您需要的格式。只需复制字节。

标签: java hex


【解决方案1】:

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

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

或威胁charint 并使用:

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

【讨论】:

    【解决方案2】:

    使用String hex = String.format("0x%02X", (int) array[i]); 指定HexDigits,在字符串前加上0x

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

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

    【讨论】:

      【解决方案3】:

      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);
      }
      

      【讨论】:

        【解决方案4】:

        你有什么理由试图通过字符串?因为你可以这样做:

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

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

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

        【讨论】:

          猜你喜欢
          • 2017-03-04
          • 2014-05-26
          • 2015-01-17
          • 1970-01-01
          • 2010-10-04
          • 2014-03-07
          • 1970-01-01
          • 2013-08-09
          • 2012-09-25
          相关资源
          最近更新 更多