gpt4 book ai didi

c++ - 将结构附加到 vector

转载 作者:太空狗 更新时间:2023-10-29 21:34:08 24 4
gpt4 key购买 nike

我正在编写一个消息通信库,需要将一些数据读取到一个结构中,并将该结构附加到一个 vector 中,然后再次读取,再次附加。

如果在 C 语言中,memcpy 工作完美,但我想要的是使所有代码都采用 C++11 代码风格。

我尝试使用 std::copy,但它需要一个开始和结束交互器,所以我如何使用 std::copy 就像 std::copy(&a, &a + sizeof(A), back_inserter (缓冲区));?

最佳答案

你可以这样做:

struct MyStruct {
int a;
double b;
int c;
};
std::vector<uint8_t> buffer;
MyStruct data { 42, 3.14159, 123 };
uint8_t* ptr = reinterpret_cast<uint8_t*>(&data);
std::copy(ptr, ptr + sizeof(data), back_inserter(buffer));

注意 std::copy 在这种情况下只是恢复到 std::memcpy reinterpret_cast 抛弃了语言的所有类型安全。 Alexander 关于使用 static_assert 的建议是一个很好的建议。

编辑:

Mário 是对的,back_inserter 会导致 std::copy 不等同于 std::memcpy。另一种方法是先重新分配缓冲区,然后复制:

size_t len = buffer.size();
buffer.resize(len+sizeof(data));
std::copy(ptr, ptr + sizeof(data), buffer.data() + len);

(或某种程度的东西)。

关于c++ - 将结构附加到 vector <uint8_t>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47917576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com