Когда использовать std :: vector <unsigned char> против std :: vector <char> - PullRequest
3 голосов
/ 09 сентября 2011

Какой из них лучше всего подходит для управления буфером символов, который можно легко преобразовать в std :: string и передать и использовать (т.е. читать / писать) в функциях C

std::vector<unsigned char> 
std::vector<char>

Ответы [ 4 ]

4 голосов
/ 09 сентября 2011
Подпись

char зависит от компилятора. 1

Может представлять unsigned char или signed char.Какой тип используется при представлении string, зависит от компилятора - поэтому вы должны использовать char для переносимости и ясности.Если этого недостаточно, убедит ли вас меньше набираемого текста при написании char?:)

Опять же, компилятор думает, что string имеет тип char *, что может быть эквивалентно unsigned char * или signed char *.Если вы собираетесь работать с string s, используйте std::vector<char>.

1 char - единственный тип с таким поведением.


Ссылки

1 Является ли char по умолчанию подписанным или неподписанным?

2 голосов
/ 09 сентября 2011

char более совместим со строками, чем unsigned char. Строковые литералы char[] и std::string на самом деле std::basic_string<char>.

0 голосов
/ 09 сентября 2011

char, unsigned char и signed char являются 3 различными типами.

  • Используйте unsigned char или signed char при работе с числами.
  • Используйте обычный char при работе со строками.

Таким образом, вы должны использовать char.

0 голосов
/ 09 сентября 2011

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

. Вы можете создать строку из вектора любого из этих типов с помощью std :: string (v.begin (), b.end ());

...