有人建议我使用类似 TCP 的校验和,它由(整数)序列和 ack 字段值的总和组成,添加到数据包有效负载字段的逐字符总和中(即,对待每个字符就好像它是一个 8 位整数,然后将它们加在一起)。
我假设它会遵循以下原则:
char[] a = data.toCharArray();
for (int i = 0; int < len; i++) {
...
}
虽然我对如何完成实际转换一无所知?
我的数据
是字符串
,我希望遍历该字符串(转换为字符数组(尽管如果有更好的方法来做到这一点,请告诉我!) )) 现在我准备迭代一下如何将每个字符转换为 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;
}
现在您可以处理字符串的任何 Unicode 内容。当使用足够的 ASCII 字母(例如中文 HTML 页面)时,UTF-8 是最佳选择。 (对于中文纯文本 UTF-16 可能更好。)
关于java - 如何将字符串中的每个字符转换为8位int? java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55380200/