我被建议使用类似TCP的校验和,它由(整数)序列和ack字段值的总和组成,添加到数据包的有效负载字段的逐个字符的总和(即,将每个字符视为如果它是一个8位整数,只需将它们加在一起)。
我假设它会遵循:
char[] a = data.toCharArray();
for (int i = 0; int < len; i++) {
...
}
虽然我对如何完成实际转换非常无能为力?
我的data
是string
,我希望通过字符串(转换为char数组(但如果有更好的方法来做这个让我知道!))现在我已经准备好迭代但是如何转换每个字符到一个int。然后我将总计总和。
由于String包含Unicode,而char
是Unicode的两字节UTF-16实现,因此首先将String转换为字节可能更好:
byte[] bytes = data.getBytes(StandardCharsets.UTF_8);
data = new String(bytes, StandardCharsets.UTF_8); // Inverse.
int crc = 0;
for (byte b : bytes) {
int n = b & 0xFF; // An int 0 .. 255 without sign extension
crc ^= n;
}
现在,您可以处理String的任何Unicode内容。当使用足够的ASCII字母时,UTF-8是最佳的,如中文HTML页面。 (对于中文纯文本,UTF-16可能会更好。)