null — массив данных c ++ с символом 0x00

Я пытаюсь отправить некоторые данные через сокет с winsock. Я сталкиваюсь с проблемой, когда мои данные (которые на самом деле являются массивом символов) могут содержать некоторые нули, но символ 0x00 представляет нулевой символ, и все последующие символы обрезаются, поскольку он представляет завершающий символ. У кого-нибудь есть идеи как мне это решить? Какую альтернативу я мог бы использовать?

Я хочу послать байты с winsock, которые могут представлять целые числа, массивы символов или что-то еще. Принимающая сторона позаботится о правильном прочтении, но это не касается этого поста.

0

Решение

Я думаю, что вы можете делать что-то вроде этого:
`

char s [100];

// Делаем вещи с s

отправить (носок, s, strlen (s), флаги);
`

strlen находит длину строки, подсчитывая количество символов, пока не найдет NULL (0).

1

Другие решения

сделать первые два байта в вашем потоке данных, быть длиной буфера, который вы отправляете.
затем отправьте столько байтов.

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

это позволит вам обойти эту проблему.

также порядок байтов в сети Google. Есть несколько удобных вызовов функций, которые облегчают переносимость.

0

По вопросам рекламы [email protected]