【问题标题】:How to convert each char in string to 8 bit int? JAVA如何将字符串中的每个字符转换为 8 位整数? JAVA
【发布时间】:2019-03-27 14:52:00
【问题描述】:

有人建议我使用类似 TCP 的校验和,它由(整数)序列和 ack 字段值的总和组成,添加到数据包有效负载字段的逐个字符总和中(即,将每个字符都好像是一个 8 位整数,只需将它们相加即可)。

我假设它会按照以下方式进行:

char[] a = data.toCharArray();
for (int i = 0; int < len; i++) {
   ...
}

虽然我对如何完成实际转换一无所知?

我的datastring,我希望遍历字符串(转换为 char 数组(如果有更好的方法,请告诉我!))现在我准备好迭代了尽管如何将每个字符转换为 int。然后我会对总数求和。

【问题讨论】:

  • 简单:在你的 for 循环中:int val = a[i];
  • 这会转换循环中的当前字符吗?

标签: java string type-conversion bit


【解决方案1】:

由于 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 字母时,UTF-8 是最佳选择,例如中文 HTML 页面。 (对于中文纯文本,UTF-16 可能会更好。)

【讨论】:

  • 我现在如何从[B@106d69c 变成一个整数?
  • byte 是一个 有符号 8 位整数,因此您快到了。我添加了一个循环示例。字节数组的 toString 只是它的类型代码[B(字节数组)和对象地址/句柄@106d69c
  • 上面的循环给我的结果是0,我不明白你为什么要使用XOR操作数?
  • 这只是一个示例,我将计算留作您的努力(+=,以及那个 ack 字段)。所以不建议有结果;信息失败。
猜你喜欢
  • 2017-04-13
  • 2016-10-18
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
相关资源
最近更新 更多