【问题标题】:getBytes doesn't get the right bytes amountgetBytes 没有得到正确的字节数
【发布时间】:2013-08-06 06:36:24
【问题描述】:

我需要创建一串十六进制值。现在,我有这样的东西。

String address = "5a f2 ff 1f";

但是当把这个地址变成字节时:

byte[] bytes= address.getBytes();

它让我将每个字母和空格作为一个字节,而不是将每个 2 个字符作为一个字节并留下空格。所以...

我该如何声明?

    private String CalcChecksum (String message) {

    /**Get string's bytes*/
    message = message.replaceAll("\\s","");
    byte[] bytes = toByteArray(message);
    byte b_checksum = 0;

    for (int byte_index = 0; byte_index < byte_calc.length; byte_index++) {
        b_checksum += byte_calc[byte_index];
    }

    int d_checksum = b_checksum;  //Convert byte to int(2 byte)
    int c2_checksum = 256 - d_checksum;  
    String hexString = Integer.toHexString(c2_checksum);  

    return hexString;
}

【问题讨论】:

    标签: android string hex


    【解决方案1】:
    String address = "5a f2 ff 1f";
    byte[] bytes = DatatypeConverter.parseHexBinary(address.replaceAll("\\s","")).getBytes();
    

    如上所述,您使用的是十六进制,您不能以您尝试的方式使用 .getBytes()!

    【讨论】:

    • 已复制但有一个错误:DatatypeConverter cannot be resolved
    • 添加导入 javax.xml.bind.DatatypeConverter;到您班级顶部的导入语句!
    • 已添加但出现此错误:无法解析导入 javax.xml.bind
    【解决方案2】:

    您需要指定您的字符串包含十六进制值。在下面的解决方案中,您需要在转换之前从字符串中删除所有空格:

    import javax.xml.bind.DatatypeConverter;
    
    class HexStringToByteArray {
    
        public static void main(String[] args) {
            String address = "5A F2 FF 1F"; 
            address = address.replaceAll("\\s","");
            System.out.println(address);
            byte[] bytes = toByteArray(address);
            for( byte b: bytes ) {
                System.out.println(b);
            }
            String string_again =  toHexString(bytes);
            System.out.println(string_again);
        }
        public static String toHexString(byte[] array) {
            return DatatypeConverter.printHexBinary(array);
        }
    
        public static byte[] toByteArray(String s) {
            return DatatypeConverter.parseHexBinary(s);
        }
    
    }
    

    这将打印(注意字节是有符号的):

    5AF2FF1F    // Original address
    90          // 5A
    -14         // F2
    -1          // FF
    31          // 1F
    5AF2FF1F    // address retrieved from byte array
    

    【讨论】:

    • 很棒的功能。但是需要在校验和函数中实现代码,所以我需要更多的代码来实现。我正在编辑帖子以在我需要实现的地方插入校验和函数。
    • toByteArray 出现错误。 The method is undefined
    • @masmic_87 如您所见,我自己定义了它。
    • 是的,你是对的。但我仍然遇到 DatatypeConverter 的问题,导入显示:无法解析导入 javax.xml.bind。
    • @masmic_87 这个错误非常普遍。去谷歌上查询。 Here's 一个想法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 2017-01-03
    相关资源
    最近更新 更多