-1

Bluetooth経由で送信する必要があるいくつかの文字列のチェックサムを計算する必要があります。送信する必要がある文字列は 5 つあるため、チェックサムを計算する関数を作成する必要があります。

これを行う関数を作成するのに助けが必要です。

これらは文字列です:

/**String to calculate the Checksum*/
    String message_part1 = send_command+" "+num_byte_trama1+" "+num_byte_variable+" "+pos_reg_1+" "+sendValue1;
    String message_part2 = send_command+" "+num_byte_trama1+" "+num_byte_variable+" "+pos_reg_2+" "+sendValue2;
    String message_part3 = send_command+" "+num_byte_trama1+" "+num_byte_variable+" "+pos_reg_3+" "+sendValue3;
    String message_part4 = send_command+" "+num_byte_trama2+" "+num_byte_variable+" "+pos_reg_save_request;
    String message_part5 = send_command+" "+num_byte_trama2+" "+num_byte_variable+" "+pos_reg_save_status;

    /**Full message*/
    String message_full1 = start_thread+" "+message_part1+" "+Checksum;
    String message_full2 = start_thread+" "+message_part2+" "+Checksum;
    String message_full3 = start_thread+" "+message_part3+" "+Checksum;
    String message_full4 = start_thread+" "+message_part4+" "+Checksum;
    String message_full5 = start_thread+" "+message_part5+" "+Checksum;

そのため、文字列を読み取り、この文字列のバイトを取得し、チェックサムを計算してから、この値を 16 進数に変換する関数を作成する必要があります。

これは私がやったことです。それが正しいかどうかはわかりませんが、int から hex への変換はまだ行っていません。

    private String CalcChecksum (String message) {

    byte[] byte_calc = message.getBytes();        
    int checksum = 0;

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

1 に答える 1

0

SMSの解析中の重複を避けるために、.hashCode(String)メソッドを使用して、SMS本文+日付のハッシュコードを作成しました。これは、32 ビット (符号付き) 整数を返します。私にとって、これはメッセージの uniqId として受け入れるのに十分なエントロピーを提供します。これは非常に高速な計算であり、プラットフォームに依存しません。

于 2013-08-05T10:19:22.877 に答える