如何将 uint8* 正确复制到矢量<Uint8>

How to copy uint8* to vector<Uint8> correctly

本文关键字:gt lt Uint8 复制 uint8      更新时间:2023-10-16

我试图从Uint8*中创建一个Uint8的向量,但由于某些原因,这些值不相同。这是我的代码。

std::vector<Uint8> wav_vector = {}; 
Uint8* wav_buffer_;   
for (unsigned int i = 0; i < wav_length_; i++) {
  wav_vector.push_back(wav_buffer_[i]);
}

然后我试图验证值:

for (unsigned int i = 0; i < wav_length_; i++){
    if (wav_buffer_[i]!=wav_vector[i]){
      cout<<i<<endl;
      printf("Orignal Buffer %un", wav_buffer_[i]);
      printf("Vector Buffer %un", wav_vector[i]);
    }
  }

这些是我的示例输出:

Index: 0
Orignal Buffer 208
Vector Buffer 40
Index: 1
Orignal Buffer 72
Vector Buffer 3
Index: 2
Orignal Buffer 111
Vector Buffer 183
Index: 3
Orignal Buffer 1
Vector Buffer 97
Index: 4
Orignal Buffer 0
Vector Buffer 79
Index: 5
Orignal Buffer 0
Vector Buffer 127
Index: 8
Orignal Buffer 120
Vector Buffer 40
Index: 9
Orignal Buffer 251
Vector Buffer 3
Index: 10
Orignal Buffer 182
Vector Buffer 183
Index: 16
Orignal Buffer 0
Vector Buffer 176
Index: 17
Orignal Buffer 0
Vector Buffer 200
Index: 18
Orignal Buffer 0
Vector Buffer 109
Index: 19
Orignal Buffer 0
Vector Buffer 1
Index: 24
Orignal Buffer 0
Vector Buffer 176
Index: 25
Orignal Buffer 0
Vector Buffer 200
Index: 26
Orignal Buffer 0
Vector Buffer 109
Index: 27
Orignal Buffer 0
Vector Buffer 1
Index: 32768
Orignal Buffer 16
Vector Buffer 120

任何帮助都将非常感激。

注意:我试过了,效果不错。但是我想使用for循环,因为我有一些其他的音频格式,这将需要位移位。

std::vector<Uint8> wav_vector(&wav_buffer_[0], &wav_buffer_[wav_length_]);

看起来std::vector有一个可以从迭代器(或指针)复制的构造函数

你可以这样做:

std::vector<uint8_t> my_vector(&wave_buffer[0], &wave_buffer[N]);

也许你可以试试memcpy:

#include <iostream>
#include <vector>
int main()
{
    uint8_t arr[3] = {1, 2, 3};
    std::vector<uint8_t> vec(3);
    memcpy(vec.data(), arr, 3);
    for (auto i : vec)
        std::cout << static_cast<int>(i) << " ";
    std::cout << std::endl;
}

将数组复制到vector的更多细节可以在https://www.techiedelight.com/convert-array-vector-cpp/

希望对大家有所帮助