计算Checksum android

时间:2013-08-05 09:09:33

标签: android string byte checksum

我需要计算一些我需要通过蓝牙发送的字符串的校验和。我需要发送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;

因此,我需要创建一个读取字符串的函数,获取此字符串的字节,计算校验和,然后将此值转换为十六进制。

这就是我所做的。我不知道它是否是正确的,我还没有完成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;
}

1 个答案:

答案 0 :(得分:0)

我使用.hashCode(String)方法只是为了创建sms body + date的哈希码,以避免在解析短信时出现重复。 这将返回一个32位(带符号)整数。对我来说,这提供了足够的熵来接受它作为消息的uniqId,这是非常快速的计算和平台无关。