【发布时间】:2018-07-12 06:46:52
【问题描述】:
Struct A
{
uint16_t len;
uint8_t cnt;
uint8_t unit;
uint32_t seq;
};
这个结构体A被序列化成一个char * buf。如果我想反序列化单个值,例如:
uint16_t len = 0;
memcpy(&len, buf, sizeof(len));
或者我可以这样做
uint16_t len = (uint16_t) buf;
哪个更好,或者两者都一样?
如果我只是这样做的话,也可以反序列化整个结构
A tmp;
memcpy(&tmp, buf, sizeof(A));
这样可以正常工作还是我应该担心编译器的填充等?
【问题讨论】:
-
您的意思可能是
len = *(uint16_t*)buf。嗯,这是一个严格的别名规则违规。 -
什么是严格的别名规则违规?
-
这是另一个问题,其实已经回答过很多次了。 stackoverflow.com/questions/98650/…
-
C++ 标签是否相关?