Должен ли быть буфер байтов со знаком или беззнаковый буфер символов? - PullRequest
53 голосов
/ 17 марта 2009

Должен ли буфер байтов быть подписан как char или unsigned char или просто как char char? Есть ли различия между C и C ++?

Спасибо.

Ответы [ 14 ]

0 голосов
/ 17 марта 2009

Ты действительно заботишься? Если вы этого не сделаете, просто используйте значение по умолчанию (char) и не загромождайте свой код неважными вопросами. В противном случае, будущие сопровождающие зададутся вопросом, почему вы используете подписанный (или неподписанный). Сделай их жизнь проще.

0 голосов
/ 17 марта 2009

Несколько лет назад у меня была проблема с консольным приложением C ++, которое печатало цветные символы для значений ASCII выше 128, и это было решено переключением с char на unsigned char, но я думаю, что это можно было решить, сохраняя и тип char.

На данный момент большинство функций C / C ++ используют char, и теперь я гораздо лучше понимаю оба языка, поэтому в большинстве случаев я использую char.

0 голосов
/ 17 марта 2009

Должен и должен ... Я, как правило, предпочитаю без знака, поскольку он кажется более "сырым", менее привлекательным, чтобы сказать "эй, это просто кучка маленьких ints", если я хочу подчеркнуть двоичность данных.

Я не думаю, что когда-либо использовал явное signed char для представления буфера байтов.

Конечно, третий вариант состоит в том, чтобы представить буфер как void * в максимально возможной степени. Многие обычные функции ввода / вывода работают с void *, поэтому иногда решение о том, какой целочисленный тип использовать, можно полностью инкапсулировать, что приятно.

0 голосов
/ 17 марта 2009

Если вы извлекаете элемент в более широкую переменную, он, конечно, будет расширяться знаком или нет.

...