-1

16 進数値の文字列を作成する必要があります。今、私はこのようなものを持っています。

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

しかし、このアドレスをバイト単位で取得する場合:

byte[] bytes= address.getBytes();

スペースを残してバイト ang として各 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;
}
4

2 に答える 2

1

文字列に 16 進値が含まれていることを指定する必要があります。以下のソリューションでは、文字列を変換する前に、文字列からすべての空白を削除する必要があります。

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
于 2013-08-05T14:25:09.477 に答える
1
String address = "5a f2 ff 1f";
byte[] bytes = DatatypeConverter.parseHexBinary(address.replaceAll("\\s","")).getBytes();

述べたように、あなたがしようとしている方法で .getBytes() を使用することはできません!

于 2013-08-05T14:18:49.017 に答える