【问题标题】:String to byte array type conversion [duplicate]字符串到字节数组类型转换[重复]
【发布时间】:2014-08-30 15:31:10
【问题描述】:

我想将字符串转换为字节数组,如下所示:

如果我有一个字符串:

String str = "0x61";

我希望它是:

byte[] byteArray = {0x61};

有什么想法吗?

【问题讨论】:

  • 开头的“0x”是强制性的吗?

标签: java android string bytearray


【解决方案1】:

您是否在此处遗漏了部分信息?你描述的问题可以用一个简单的

byte[] byteArray = {Byte.decode(str)};

【讨论】:

    【解决方案2】:

    如果我理解你的问题,那么你可以这样做 -

    String str = "0x61";
    byte[] arr = new byte[] {(byte) Integer.parseInt(str.substring(2), 16)};
    System.out.println(arr[0] == 0x61);
    

    输出是

    true
    

    【讨论】:

      【解决方案3】:

      我真的不知道你想要达到什么目的。你能详细说明你的用例吗?

      我相信你想要的是

      str.getBytes();
      

      看这里https://stackoverflow.com/a/18571348/2163130

      【讨论】:

        【解决方案4】:

        如果您的字符串在每个数字前没有 0x,那么此方法将执行转换:

        private byte[] generateByteArray(String byteArrayStr)
            {
                byte[] result = new byte[byteArrayStr.length() / 2];
                for (int i = 0; i < byteArrayStr.length(); i += 2)
                {       
                    result[i / 2] = (byte)((Character.digit(byteArrayStr.charAt(i), 16) << 4) + Character.digit(byteArrayStr.charAt(i + 1), 16));               
                }
        
                return result;
            }
        

        此方法会将 "FF00" 转换为 {255, 0}

        您需要确保字符串的长度是偶数,因为每 2 位数字将构成 1 个字节(十六进制格式)。

        【讨论】:

          【解决方案5】:

          步骤 1) 将十六进制转换为长整数 步骤 2) 将 long 转换为字节数组。

          String str = "0x61";    
          long l = Long.valueOf(str).longValue(); //step 1
          byte[] bytes = ByteBuffer.allocate(8).putLong(l).array(); //step 2
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-26
            • 2014-11-20
            • 1970-01-01
            • 1970-01-01
            • 2011-12-14
            相关资源
            最近更新 更多