Recv () в Winsock требует подписанного буфера - PullRequest
0 голосов
/ 17 февраля 2020

Я использую recv() на Linux с unsigned char buffer, и он хорошо работает.

Но для recv () на Windows требуется signed char, и я не знаю почему.

Я думал, что пакет может быть только символом ASCII.

Должен ли я использовать что-то вроде этого (char)buffer?

1 Ответ

1 голос
/ 17 февраля 2020

char, unsigned char и signed char - это разные типы, но все они 8-битные. Теоретически все "буферы" должны быть unsigned char*. На практике многие функции используют обычный char*, включая большинство Win32 API. Во всех таких случаях это простой 8-битный массив.

Короче говоря, приведите его свободно.

Случаи, которые на самом деле нуждаются в char, а не unsigned char, должны быть очевидны для обнаруживать и обрабатывать.

Согласно комментарию @JJ, у вас также есть std::byte для необработанных 8-битных вещей без символьных характеристик, аналогично BYTE в Win32.

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