java - 如何将字符串中的每个字符转换为8位int? java

标签 java string type-conversion bit

有人建议我使用类似 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/

相关文章:

java - auth.net 中的 E00007 : User authentication failed due to invalid authentication values.

java - 避免使用 cookie 登录 Java Web 应用程序

java - Hibernate JPA无法在SQL Server中创建索引

c++ - 如何将 UTF-16 中的字符串转换为 C++ 中的 UTF-8

c++ - 如果字符串中有空格,String.size() 返回不正确的数字

c# - 我如何将 JObject 转换为 C# 中的对象?

java - JUnit 测试 : Forcing exception from internal method call

javascript - 限制为所有字符还是所有数字?

c# - 使用 ToArray() 将列表转换为数组

delphi - 如何将格式化为以下格式的字符串转换为TDateTime:15h44m28s?