何时使用std::vector<unsigned char>与std::vector<char>?

3
哪种方法最适合管理字符缓冲区,以便轻松转换为std :: string并通过C函数进行使用(即读取/写入)?
std::vector<unsigned char> 
std::vector<char>
4个回答

4

char的有符号性取决于编译器1

它可以表示一个unsigned charsigned char。在表示string时使用哪种类型取决于编译器 - 因此,您应该使用char以实现可移植性和清晰度。如果这还不够,那么写char时所需的输入量会说服您吗? :)

同样,编译器认为stringchar *类型,它可以等同于unsigned char *signed char *。如果你要使用string,请使用std::vector<char>

1 char是唯一具有这种行为的类型。


参考资料

1 char默认是有符号的吗?


2

charunsigned char更适用于字符串。字符串字面值是char[],而std::string实际上是std::basic_string<char>


无符号字符与字符串不兼容的方式是什么?换句话说,如果我使用无符号字符表示字符串,会出现什么问题?我并不质疑你的答案,只是想更好地理解。 - karimjee
@karimjee:std::stringstd::basic_string<char>的typedef;std::basic_string<>依赖于std::char_traits<>,但是std::char_traits<>仅针对charwchar_t进行了特化。因此,std::basic_string<>可移植性方面不能很好地处理unsigned char(尽管在实践中,它可以与大多数现代编译器很好地配合使用)。 - ildjarn
@ildjarn:你发布了最好的答案回复给原始问题的提问者。 - J T

0

两者都同样适合。如果这些是字符缓冲区,而不是字节,我会选择std::vector< char >。

您可以使用std::string( v.begin(), b.end() );从任何这些类型的向量创建字符串。


0

charunsigned charsigned char是三种不同的类型。

  • 处理数字时,请使用unsigned charsigned char
  • 处理字符串时,请使用常规的char

因此,您应该使用char


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接