我的演员代码上有这个警告:
取消引用类型惩罚指针将破坏严格别名规则[-Wstrict-aliasing]
unsigned char buffer[64];
...
unsigned int value = *(unsigned int*)buffer;
如何修复此警告?
感谢您的帮助!
答案 0 :(得分:2)
此代码的作用取决于平台的字节顺序,对齐规则,整数大小等。通过观察它无法知道它的作用。但你可能想要这样的东西:
unsigned int value = buffer[0];
value = (value << 8) | buffer[1];
value = (value << 8) | buffer[2];
value = (value << 8) | buffer[3];
答案 1 :(得分:2)
如何解决此警告?
首先不要使用type-punning。在此示例中,您可以改用memcpy()
;
unsigned char buffer[64];
...
unsigned int value;
memcpy(&value, buffer, sizeof(value));
如果出现字节序问题,则可以在之后交换value
的字节。或者,您可以使用移位解决方案,例如@DavidSchwartz's answer节目。