When to use std::vector<unsigned char> vs. std::vector<char>
Which of o开发者_运维知识库ne of these is best suited for managing a character buffer that can be easily converted to std::string and passed to and used ( i.e. 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 asigned char
when dealing with numbers. - Use a regular
char
when dealing with strings.
Thus, you should use a char
.
精彩评论