-2
uint    data1;
ushort  data2;
ushort  data3;
uchar   data4[8];

std::uint8_t buff[16];
std::uint8_t* out = buff;

out = std::copy_n(reinterpret_cast<std::uint8_t*>(&quid.data1), 4, out);
out = std::copy_n(reinterpret_cast<std::uint8_t*>(&quid.data2), 2, out);
out = std::copy_n(reinterpret_cast<std::uint8_t*>(&quid.data3), 2, out);

std::copy_n(quid.data4, 8, out);

out如果我不使用,为什么结果会有所不同reinterpret_cast

4

2 回答 2

4
std::copy_n(&quid.data1, 4, out);

就像quid.data1被声明为uint data1[4]. 结果是quid.data1被复制到out[0]和其他3个元素out得到一个垃圾。

std::copy_n(reinterpret_cast<std::uint8_t*>(&quid.data1), 4, out);

将 的内容data1视为 4 个字符的数组,如果sizeof(uint)==4.

于 2012-10-24T16:10:45.687 回答
4

结果会有所不同,因为&xhas type T *, whereT是 的类型x,并且指针算术将+ 1其视为“将指针前进sizeof(T)”,因此实际上您将指针视为指向该类型元素数组的指针。

如果更改指针的类型,您将把它指向的内存视为不同类型元素的数组——例如,将 anint视为 s 的数组char

于 2012-10-24T16:12:11.580 回答