c – 切换字节顺序而不打字
发布时间:2020-12-16 10:06:42 所属栏目:百科 来源:网络整理
导读:我需要切换字节的顺序,以便int16与内容(byte1,byte2) – (byte2,byte1).我用联盟做到了这个: union ConversionUnion{ uint8_t m_8[4]; uint16_t m_16[2]; uint32_t m_32;};//useuint16_t example = 0xFFDEConversionUnion converter;converter.m_16[0] = ex
我需要切换字节的顺序,以便int16与内容(byte1,byte2) – > (byte2,byte1).我用联盟做到了这个:
union ConversionUnion { uint8_t m_8[4]; uint16_t m_16[2]; uint32_t m_32; }; //use uint16_t example = 0xFFDE ConversionUnion converter; converter.m_16[0] = example; std::swap(converter.m_8[0],converter.m_8[1]); example = converter.m_16[0]; //0xDEFF 现在这确实适用于gcc,但我被告知这是未定义的行为(gcc 6.3,C 11). 问题: 1)这是否真的是未定义的行为,我问,因为我之前在嵌入式代码中已经看过这个.其他stackoverflow问题似乎在争论这个问题,谁实际上是正确的(对于C 11和C 14). 2)如果这是未定义的行为,则可以以便携方式进行字节顺序交换而无需一堆位移.我真的讨厌一点点转移,它非常难看. 解决方法
通过char *允许类型惩罚,那么为什么不使用它而不是联合呢?
uint16_t example = 0xFFDE; char *char_alias = reinterpret_cast<char*>(&example); std::swap(char_alias[0],char_alias[1]); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- 使用C#API使用SSPI对vSphere进行身份验证
- 未能加载文件或程序集“CuteEditor”或它的某一个
- VB.net版机房收费-ConfigurationManager类引用方
- .net – DateTime和xsd:Date的往返XML序列化?
- Swift中的ARC相关
- appcompat_v7/res/values-v21/themes_base.xml N
- c# – 如何在ASP.NET中编写内存使用情况日志
- cocos2d-x安卓调试 android.content.res.Resourc
- 海量吞吐的实时NoSQL:HBase的七剑和双11圣战(数
- cocoa-touch – 在数组cocos2d`中获取精灵的位置
热点阅读