2013-08-05 277 views
-1

我需要计算一些需要通过蓝牙发送的字符串的校验和。有5个字符串需要发送,所以我需要创建一个函数来计算校验和。计算校验和android

我需要帮助创建功能来做到这一点。

这些字符串:

/**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; 

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

这就是我所做的。我不知道这是否是correcto,我还没有做过的int进制转换:

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; 
} 
+0

发表我已经做了 – masmic

回答

0

我用.hashCode(String)方法简单地创建一个SMS体+日期的散列码,以避免解析短信过程中的重复。 这将返回一个32位(带符号)整数。对我来说,这提供了足够的熵来接受它作为消息的唯一性,这是相当快的计算和平台独立。