【问题标题】:How to Convert byte array to hexString in java? [duplicate]如何在java中将字节数组转换为hexString? [复制]
【发布时间】:2013-03-03 23:33:39
【问题描述】:

我有一个由十六进制值组成的字节数组,例如CA ,FA,21,33

但我想在JList 中将它们列为单个元素CAFA2133。 为了在 JList 中列出它们,我想我需要将其转换为 string。 那么有什么推荐的吗?

【问题讨论】:

    标签: java


    【解决方案1】:
    public static String bytesToHex(byte[] in) {
        final StringBuilder builder = new StringBuilder();
        for(byte b : in) {
            builder.append(String.format("%02x", b));
        }
        return builder.toString();
    }
    

    【讨论】:

      【解决方案2】:

      您需要查看String.format()Formatter 规范。

      例如

      String.format("%02x", byteValue);

      遍历数组并将每个String.format() 结果附加到StringBuilder

      【讨论】:

      • 漂亮而简单。我不需要在其他重复的问题和答案上筛选文字墙:)
      • 可以,但是基于字节操作比下面的方法耗时大约3倍
      • 有趣。您可以链接到下面的具体答案吗?
      【解决方案3】:

      怎么样:

      public static String bytesToHex(byte[] bytes) {
          final char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
          char[] hexChars = new char[bytes.length * 2];
          int v;
          for ( int j = 0; j < bytes.length; j++ ) {
              v = bytes[j] & 0xFF;
              hexChars[j * 2] = hexArray[v >>> 4];
              hexChars[j * 2 + 1] = hexArray[v & 0x0F];
          }
          return new String(hexChars);
      }
      

      Source

      【讨论】:

      • 看起来像是从重复的问题中复制和粘贴。您至少应该提及您复制它的来源。
      • 他确实将源链接作为答案的一部分
      • @MrSmith42:我已经为你把源代码加粗了;)
      【解决方案4】:

      此方法应该为您执行此操作..将字节数组作为参数传递以返回十六进制字符串...

      private static String convertToHexString(byte[] data) {
      StringBuffer buf = new StringBuffer();
      for (int i = 0; i < data.length; i++) {
          int halfbyte = (data[i] >>> 4) & 0x0F;
          int two_halfs = 0;
          do {
              if ((0 <= halfbyte) && (halfbyte <= 9))
                  buf.append((char) ('0' + halfbyte));
              else
                  buf.append((char) ('a' + (halfbyte - 10)));
                  halfbyte = data[i] & 0x0F;
              } while(two_halfs++ < 1);
          }
      return buf.toString();
      }
      

      希望有帮助..

      【讨论】:

        【解决方案5】:

        您可以使用Integer.toStringint i, int radix) 将每个数字转换为十六进制字符串,然后将它们连接在一起。现在您只需要将字节转换为 int。

        【讨论】:

          【解决方案6】:

          请参阅IntegertoHexString。 将您的 byte 转换为 int 然后获取结果字符串应该可以解决问题。 当然,您必须将字符串与StringBuilder 连接起来。

          【讨论】:

            【解决方案7】:
            import java.util.HashMap;
            
            public class NumUtil
            {   private static HashMap<Byte,char[]>byteToHex=new HashMap<Byte, char[]>();
                static
                {   for(int i=0;i<16;++i)
                        byteToHex.put((byte)i, new char[]{'0',Integer.toHexString(i).charAt(0)});
                    for(int i=16;i<256;++i)
                        byteToHex.put((byte)i, Integer.toHexString(i).toCharArray());
                }
                public static String toHexString(byte[]bytes)
                {   StringBuilder stringBuilder = new StringBuilder(bytes.length*2);
                    for(byte b:bytes)
                        stringBuilder.append(byteToHex.get(b));
                    return stringBuilder.toString();
                }
            }
            

            【讨论】:

              【解决方案8】:

              如果这个数组有 4 个字节长,你可以连接字节并使用 Integer.toString(int, int) 方法。

              byte[] array = /* initialization */;
              int x = 0;
              for (int i = 0, l = Math.min(array.length, 4); i < l; i++) {
                  x <<= 8;
                  x |= (array[i] & 0xFF);
              }
              String hex = Integer.toString(x, 16);
              

              【讨论】:

                猜你喜欢
                • 2013-07-08
                • 2011-01-10
                • 2011-09-16
                • 1970-01-01
                • 2017-07-01
                • 2013-04-07
                • 1970-01-01
                • 2017-04-03
                • 1970-01-01
                相关资源
                最近更新 更多