2017-03-03 77 views
-1

我有一个函数,将整数数组拷贝到向量中,并且与std :: copy调用正常工作,但是当我将std :: copy复制到std :: memcpy时,它无法正常工作。有人可以指出我做错了什么吗?将std :: copy转换为std :: memcpy不起作用?

void Walle_SSD1306::RadarD(uint8_t *RadarLL, uint8_t isFirstRadarLogo) 
{ 
//Following two copy statement is working correctly 
std::copy(
    RadarLL+128 
    , RadarLL + 8192 
    , buffer.begin()+128 
    ); 
std::copy(
    RadarLL+38 
    , RadarLL + 90 
    , buffer.begin()+38 
    ); 

//But when I change copy to memcpy following code is not working correctly 
std::memcpy(
    (buffer.begin()+128) , (RadarLL+128), (8192 - 128)*sizeof(uint8_t) 
    ); 
std::memcpy(
    (buffer.begin()+38), (RadarLL+38), (52*sizeof(uint8_t)) 
    ); 

//where buffer is... 
std::vector<uint8_t> buffer; 
+0

这种表达buffer.begin()+ 128在使用的memcpy是无效的。你应该至少使用&bffer [128]或buffer.data()+ 128 –

+0

当你说“不工作”时,我们不知道这意味着什么。它甚至编译? –

+0

代码正在编译但缓冲区没有从RadarLL获得正确的值。你能指出我正在做的任何错误吗? – user5572904

回答

1

的std ::复制可以使用迭代工作,并支持缓冲区重叠 的memcpy只有指针

0

中的memcpy使用表达式buffer.begin()+128是无效的,因为一般这个表达式产生一个迭代器的工作原理。

你应该使用指针。例如

std::memcpy(
    (buffer.data()+128) , (RadarLL+128), (8192 - 128)*sizeof(uint8_t) 
    ); 

std::memcpy(
    &buffer[128] , (RadarLL+128), (8192 - 128)*sizeof(uint8_t) 
    );