0

我想使用 memcpy 填充一个结构。

结构声明如下:

struct udtFeatures
{
    vector<unsigned char>ByteFeatures;
};

这就是我想填充字节的地方:

void clsMapping::FeedFeaturesFromMap(udtFeatures &uFeatures,int uOtherIndex)
{
    int iBytePos=this->Content()[uOtherIndex].ByteStart;
    int iByteCount=this->Content()[uOtherIndex].ByteCount;

    memcpy(uFeatures.ByteFeatures, &((char*)(m_pVoiceData))[iBytePos],iByteCount);
}

但是 memcpy 不喜欢这样。

编译器说:

找不到匹配的转换函数

std::vector<unsigned char, std::allocator<unsigned char>> in void *.

我猜是因为它 .ByteFeatures 只是一个指针?

我怎么能这样做?

4

4 回答 4

5

我猜是因为它 .ByteFeatures 只是一个指针?

不,这是因为它不仅仅是一个指针。它是一个向量。

我怎么能这样做?

如果你想要一个指向由向量管理的数组的指针,那么就是uFeatures.ByteFeatures.data()or &uFeatures.ByteFeatures[0]。或者,您可以考虑std::copy改用。

无论哪种情况,在将内容复制到其中之前,请确保向量足够大。

于 2013-05-06T11:39:04.920 回答
0

uFeatures.ByteFeatures应该&uFeatures.ByteFeatures[0]

于 2013-05-06T12:36:56.180 回答
0

可以使用memcpy初始化 a std::vector,但不建议这样做。

而是使用std::copy

std::copy(&m_pVoiceData[iBytePos], &m_pVoiceData[iBytePos + iByteCount],
          std::back_inserter(uFeatures.ByteFeatures));
于 2013-05-06T11:38:42.410 回答
0

你不能std::vector使用 memcpy 填充(嗯..有一种方法,但你最好把它当作不是)。自行使用std::copy或填写。

于 2013-05-06T11:38:54.237 回答