哪种方法最适合管理字符缓冲区,以便轻松转换为std :: string并通过C函数进行使用(即读取/写入)?
std::vector<unsigned char>
std::vector<char>
char
的有符号性取决于编译器1
它可以表示一个unsigned char
或signed char
。在表示string
时使用哪种类型取决于编译器 - 因此,您应该使用char
以实现可移植性和清晰度。如果这还不够,那么写char
时所需的输入量会说服您吗? :)
同样,编译器认为string
是char *
类型,它可以等同于unsigned char *
或signed char *
。如果你要使用string
,请使用std::vector<char>
。
1 char
是唯一具有这种行为的类型。
char
比unsigned char
更适用于字符串。字符串字面值是char[]
,而std::string
实际上是std::basic_string<char>
。
两者都同样适合。如果这些是字符缓冲区,而不是字节,我会选择std::vector< char >。
您可以使用std::string( v.begin(), b.end() );从任何这些类型的向量创建字符串。
char
、unsigned char
和signed char
是三种不同的类型。
unsigned char
或signed char
。char
。因此,您应该使用char
。
std::string
是std::basic_string<char>
的typedef;std::basic_string<>
依赖于std::char_traits<>
,但是std::char_traits<>
仅针对char
和wchar_t
进行了特化。因此,std::basic_string<>
在可移植性方面不能很好地处理unsigned char
(尽管在实践中,它可以与大多数现代编译器很好地配合使用)。 - ildjarn