简体   繁体   中英

When to use std::vector<unsigned char> vs. std::vector<char>

Which of one of these is best suited for managing a character buffer that can be easily converted to std::string and passed to and used ( ie read / write ) in C functions

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

char 's signedness depends on the compiler. 1

It can represent a unsigned char or signed char . Which type is used when representing a string is dependent on the compiler - therefore you should use char for portability, and clarity. If that isn't enough, would the less typing needed when writing char convince you? :)

Again, the compiler thinks string s are of type char * , which can be equivalent to unsigned char * or signed char * . If you're going to be working with string s use std::vector<char> .

1 char is the only type with this behavior.


References

1 Is char signed or unsigned by default?

char is more compatible with strings than unsigned char . String literals are char[] and std::string is actually std::basic_string<char> .

Both are equally well suited. If these are character buffers, as opposed to bytes, I would go with std::vector< char >.

You can create a string from a vector of any of those types with std::string( v.begin(), b.end() );

char , unsigned char , and signed char are 3 distinct types.

  • Use an unsigned char or a signed char when dealing with numbers.
  • Use a regular char when dealing with strings.

Thus, you should use a char .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM