我想用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只是一个指针?
我怎么能这样做?
答案 0 :(得分:5)
我猜是因为它.ByteFeatures只是一个指针?
不,这是因为不是只是一个指针。这是一个载体。
我怎么能这样做?
如果你想要一个指向矢量管理的数组的指针,那就是uFeatures.ByteFeatures.data()
或&uFeatures.ByteFeatures[0]
。或者,您可以考虑使用std::copy
代替。
在任何一种情况下,确保向量足够大,然后再将其复制到其中。
答案 1 :(得分:0)
可以使用memcpy
初始化std::vector
,但不建议。
而是使用std::copy
:
std::copy(&m_pVoiceData[iBytePos], &m_pVoiceData[iBytePos + iByteCount],
std::back_inserter(uFeatures.ByteFeatures));
答案 2 :(得分:0)
你不能使用memcpy来填充std::vector
(嗯......有办法,但你最好还是把它想象一下)。使用std::copy
或自行填写。
答案 3 :(得分:0)
uFeatures.ByteFeatures
应为&uFeatures.ByteFeatures[0]