Мне не ясно, в чем проблема.И Windows, и Linux определяют bool
как однобайтовый объект.
Windows определяет , определяет BOOL
как int
, поэтому, если вы ставите BOOL
напровод и чтение его как bool
(или добавление bool
на провод и чтение его как BOOL
), тогда у вас возникнут проблемы.Это относительно легко исправить.
Возможно, Windows и Linux определяют разные значения для false
и true
(более вероятно, что они согласны с тем, что false
равно 0
, но не согласныдля значения, используемого для true
, даже вне сетевого программирования возможно иметь bool
переменные, которые не являются true
или false
, см. ниже).Стандарт требует, чтобы bool
s был хотя бы одним байтом, а байт имеет гораздо больше двух возможных значений.
Да, преобразование ваших bool
s в unsigned char
s и отправка , что по проводам будет работать нормально.
Примечание : "bool
переменные, которые не являются true
или false
":
// obviously this code won't show up in anybody's code base
char a = 'a';
bool b = *reinterpret_cast<bool*>(&a);
switch (b) {
case true:
std::printf("true\n");
break;
case false:
std::printf("false\n");
break;
default:
std::printf("huh?\n");
break;
}