大佬教程收集整理的这篇文章主要介绍了C中的字节序宏,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#ifndef ORDER32_H #define ORDER32_H #include <limits.h> #include <stdint.h> #if CHAR_BIT != 8 #error "unsupported char size" #endif enum { O32_LITTLE_ENDIAN = 0x03020100ul,O32_BIG_ENDIAN = 0x00010203ul,O32_PDP_ENDIAN = 0x01000302ul }; static const union { unsigned char bytes[4]; uint32_t value; } o32_host_order = { { 0,1,2,3 } }; #define O32_HOST_ORDER (o32_host_order.value) #endif
>创建小,中,大字节序的示例.
>将测试用例与little,middle和big endianness的示例进行比较,并确定主机的类型.
我不明白的是以下几个方面:
>为什么工会需要存储测试用例? uint32_t是否保证能够根据需要保存32位/ 4字节?赋值{{0,3}}是什么意思?它为联合分配值,但为什么奇怪的标记有两个括号?
>为什么检查CHAR_BIT?一条评论提到检查UINT8_MAX会更有用吗?为什么char甚至在这里使用,当它不能保证是8位宽?为什么不使用uint8_t?我发现this链接到Google-Devs github.他们不依赖这个检查……有人可以详细说明吗?
测试的整个要点是使用数组将创建的魔术值对数组进行别名.
uint32_t是否保证能够根据需要保存32位/ 4字节?
好吧,或多或少.除了32位之外,没有任何保证.它只会在你永远不会遇到的一些真正的边缘建筑上失败.
内支架用于阵列.
为什么检查CHAR_BIT?
因为这是实际的保证.如果这不会爆炸,一切都会奏效.
一条评论提到检查UINT8_MAX会更有用吗?为什么char甚至在这里使用,当它不能保证是8位宽?
因为事实上它总是如此.
为什么不使用uint8_t?我找到了Google-Devs github的链接.他们不依赖这个检查……有人可以详细说明吗?
许多其他选择也会起作用.
以上是大佬教程为你收集整理的C中的字节序宏全部内容,希望文章能够帮你解决C中的字节序宏所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。