Что означает длина строки в октете на языке c? - PullRequest
0 голосов
/ 10 декабря 2018

Написание небольшой программы на сокете в c.Сервер ожидает, что клиенты будут добавлять полезную нагрузку сообщения к размеру сообщения, используя 32-разрядное целое число без знака, которое представляет длину сообщения в октетах.Как мне получить размер сообщения в октетах.Сообщение является строкой XML.

char xmlPong[] = "<upms><msg type=\"pong\"/></upms>";
unsigned int pongSize = strlen(xmlPong);

sprintf(str, "%4X", pongSize);

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

«Октеты» просто означают «8-битные байты».Следовательно, strlen(xmlPong) является допустимым способом для вычисления длины вашей строки в октетах (не включая NUL-терминатор строки).

0 голосов
/ 10 декабря 2018

В некоторых (редко встречающихся) системах не все байты имеют размер 8 бит.Большинство из этих машин сейчас мертвы, но C должен их поддерживать, иначе рискует быть непереносимым.Чтобы учесть это, C оставляет точные данные о «количестве битов в байте» как неопределенные.

Таким образом, в сети вы не можете иметь «неопределенное» количество бит в вашем байте.Чтобы исправить это, в сетевом коде появилось слово octect, которое означает «число, состоящее из восьми битов»

Это означает, что длина вашей строки равна длине строки в байтах на 8битовые системы.Не забывайте заканчивать пробел.

0 голосов
/ 10 декабря 2018

Наборы символов переменной длины и / или многобайтовые, такие как UTF-8 и UTF-16, означают, что длина чего-либо в «байтах» (октетах) и «символах» может и будет отличаться.

Только 8-битные кодировки (ASCII, ISO-Latin1 и т. Д.) Одинаковы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...