【发布时间】:2011-09-09 11:40:38
【问题描述】:
其中哪一个最适合管理可以轻松转换为 std::string 并传递给 C 函数并在 C 函数中使用(即读/写)的字符缓冲区
std::vector<unsigned char>
std::vector<char>
【问题讨论】:
其中哪一个最适合管理可以轻松转换为 std::string 并传递给 C 函数并在 C 函数中使用(即读/写)的字符缓冲区
std::vector<unsigned char>
std::vector<char>
【问题讨论】:
char 的签名取决于编译器。1
它可以表示unsigned char 或signed char。表示 string 时使用哪种类型取决于编译器 - 因此您应该使用 char 以实现可移植性和清晰性。如果这还不够,那么在编写char 时需要更少的输入会说服你吗? :)
同样,编译器认为strings 是char * 类型,它可以等价于unsigned char * 或signed char *。如果您要使用strings,请使用std::vector<char>。
1char 是唯一具有此行为的类型。
【讨论】:
char 比 unsigned char 更兼容字符串。字符串文字是 char[] 和 std::string 实际上是 std::basic_string<char>。
【讨论】:
std::string 是std::basic_string<char> 的类型定义; std::basic_string<> 依赖于std::char_traits<>,但std::char_traits<> 仅专用于char 和wchar_t。因此,std::basic_string<> 无法便携与开箱即用的unsigned char 配合使用(尽管在实践中,它可以与大多数现代编译器一起正常工作)。
两者都非常适合。如果这些是字符缓冲区,而不是字节,我会选择 std::vector。
您可以使用 std::string( v.begin(), b.end() ); 从任何这些类型的向量创建字符串;
【讨论】:
char、unsigned char 和 signed char 是 3 种不同的类型。
unsigned char 或signed char。char。因此,您应该使用char。
【讨论】: