【问题标题】:When to use std::vector<unsigned char> vs. std::vector<char>何时使用 std::vector<unsigned char> 与 std::vector<char>
【发布时间】:2011-09-09 11:40:38
【问题描述】:

其中哪一个最适合管理可以轻松转换为 std::string 并传递给 C 函数并在 C 函数中使用(即读/写)的字符缓冲区

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

【问题讨论】:

    标签: c++ stdvector


    【解决方案1】:

    char 的签名取决于编译器。1

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

    同样,编译器认为strings 是char * 类型,它可以等价于unsigned char *signed char *。如果您要使用strings,请使用std::vector&lt;char&gt;

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


    参考文献

    1Is char signed or unsigned by default?

    【讨论】:

      【解决方案2】:

      charunsigned char 更兼容字符串。字符串文字是 char[]std::string 实际上是 std::basic_string&lt;char&gt;

      【讨论】:

      • unsigned char 在什么情况下不能与字符串兼容?换句话说,如果我使用 unsigned char 来表示字符串,你能帮我说明会出现什么问题吗?我不是在争论你的回答我只是想更好地理解
      • @karimjee : std::stringstd::basic_string&lt;char&gt; 的类型定义; std::basic_string&lt;&gt; 依赖于std::char_traits&lt;&gt;,但std::char_traits&lt;&gt; 仅专用于charwchar_t。因此,std::basic_string&lt;&gt; 无法便携与开箱即用的unsigned char 配合使用(尽管在实践中,它可以与大多数现代编译器一起正常工作)。
      • @ildjarn:您发布了对 OP 原始问题的最佳答案
      【解决方案3】:

      两者都非常适合。如果这些是字符缓冲区,而不是字节,我会选择 std::vector。

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

      【讨论】:

        【解决方案4】:

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

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

        因此,您应该使用char

        【讨论】:

          猜你喜欢
          • 2012-03-07
          • 1970-01-01
          • 2014-12-11
          • 1970-01-01
          • 2013-11-18
          • 1970-01-01
          • 2021-07-11
          • 2014-02-19
          • 1970-01-01
          相关资源
          最近更新 更多