将std ::复制转换为std :: memcpy不起作用
Converting std::copy to std::memcpy is not working?
我具有函数,将整数数组的副本复制到向量中,该功能与std ::复制呼叫正常工作,但是当我更改std :: coppy to 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;
std ::复制可以与迭代器一起使用,并支持缓冲区重叠memcpy仅与指针一起使用
使用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)
);
相关文章:
- 使用 memcpy() 复制到 std::chrono::milliseconds 会给出错误 -Werror=clas
- 如何使用多次 memcpy 转换回 std::vector<unsigned char>?
- 在什么条件下使用 std::memcpy 在对象之间复制是安全的?
- std::memcpy vs std::copy_n for legacy c structs
- 将结构 std::memcpy 转换为具有足够容量的 std::vector 是未定义的行为<char>吗?
- 是std::memcpy在不同的可复制类型之间的未定义行为
- 为什么 memcpy() 是一种将元素添加到 'std::map' 的方法?
- 为什么 std::memcpy(作为类型双关语的替代方案)不会导致未定义的行为?
- 将std ::复制转换为std :: memcpy不起作用
- std::memcpy或显式字符值赋值-在C++中等于合法
- std::memcpy结构,具有TriviallyCopyable类型T的紧密封装成员到T的数组,反之亦然
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 与C-string('malloc'+'memcpy')相比,'std::string'的性能真的很差
- memcpy或std ::复制我的特定应用程序
- 为什么对于不可TriviallyCopy的对象,std::memcpy的行为是未定义的
- 我可以防止对象被 std::memcpy 复制吗?
- 如何从原始数组到std::vector执行memcpy等效操作
- 将std::memcpy用于非平凡可复制类型的对象
- 普通旧数据和“std::memcpy”对齐问题
- 在使用std::copy而不是std::memcpy复制字符时避免libc函数调用