【问题标题】:C++ how to convert char array to vector of bytes (vector<byte>)C++ 如何将 char 数组转换为字节向量(vector<byte>)
【发布时间】:2019-03-08 19:56:30
【问题描述】:

我有大量的字符

char myCharArray[] = {
  0x9B,0x3E,0x34,0x87,0xFD,0x24,0xB4,0x64,0xBA,0x80,0x04,0xFD,
  0xDF,0x23,0x41,0xEE,0x00,0x00,0x00,0x00,0xAC,0xF9,0x8F,0x00,
  ...
}

如何将myCharArray转换为vector&lt;byte&gt;

【问题讨论】:

  • 只需将char myCharArray[] 替换为std::vector&lt;byte&gt; myCharArray(或任何名称)即可。问题已解决 - 如果“转换”是指更改变量的类型。
  • 或者写std::vector&lt;char&gt; v(std::begin(myCharArray), std::end(myCharArray));,它会自己复制内容。

标签: c++ arrays vector type-conversion


【解决方案1】:
std::vector<std::byte> bytes;
for (char &c : myCharArray) {
    bytes.push_back(static_cast<std::byte>(c));
}

【讨论】:

    【解决方案2】:

    您可以将char 的数组作为std::byte 的数组进行检查。所以最有效的解决方案是:

    #include <iterator> // for std::begin / end
    
    std::vector<std::byte> v(
        reinterpret_cast<std::byte*>(std::begin(myCharArray)), 
        reinterpret_cast<std::byte*>(std::end(myCharArray))
    );
    

    这样,向量预先知道要分配多少内存,它可以通过 memcpy 或类似的高效例程执行复制,而不是一个接一个地复制一个字节,并且必须在其间重新分配多次。

    编辑:
    请注意,此代码仅有效,因为本机数组上的 std::begin 的返回类型保证为指针。如果 myCharArray 是例如std::vector&lt;char&gt;,然后std::begin/end 将返回一个迭代器(它可能是也可能不是本机指针)。在这种情况下,你会例如需要使用myCharVector.data()myCharVector.data() + myCharVector.size() 来获取指向数组开头和结尾的指针。

    【讨论】:

      猜你喜欢
      • 2016-10-01
      • 2017-03-05
      • 1970-01-01
      • 2011-05-13
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      相关资源
      最近更新 更多