Как преобразовать каждый символ в строке в 8-битное int? ДЖАВА - PullRequest
0 голосов
/ 27 марта 2019

Мне предложили TCP-подобную контрольную сумму, которая состоит из суммы (целочисленной) последовательности и значений поля подтверждения, добавленных к посимвольной сумме поля полезной нагрузки пакета (т. Е. каждый символ, как если бы это было 8-битное целое число и просто сложить их вместе).

Я предполагаю, что это будет выглядеть следующим образом:

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

Хотя я совершенно не знаю, как мне завершить фактическое преобразование?

Мой data равен string, и я хочу просмотреть строку (преобразованную в массив символов (хотя, если есть лучший способ сделать это, дайте мне знать!)), И теперь я готов повторить хотя, как можно преобразовать каждый символ в Int. Затем я подведу итоги.

1 Ответ

2 голосов
/ 27 марта 2019

Поскольку String содержит Unicode, а char является двухбайтовой реализацией UTF-16 Unicode, может быть лучше сначала преобразовать 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;
}

Теперь вы можете обрабатывать любое содержимое строки в Юникоде. UTF-8 оптимален при использовании достаточного количества букв ASCII, таких как китайские HTML-страницы. (Для простого текста на китайском UTF-16 может быть лучше.)

...