自编码任何c以来已经有一段时间了,但我有一个我想要处理的新项目,这需要以固定比特长度(32位)为单位处理数据文件。我想确保我可以定义一个可在机器之间移植的固定32位类型。
我知道limits.h中的CHAR_BIT给出了char中的位数,而sizefof()函数给出了一个类型中的字符数(例如int),所以我可以很容易地将这两个字符相乘以找到位数。以int为例。我已经读过CHAR_BIT并不一定是' 8'并且知道int类型在不同的处理器上可以有不同的大小。
在运行时,我考虑使用switch语句和typedef来定义基于对不同int类型检查CHAR_BIT和sizeof()的自定义32位类型。
我当时想知道,如果这可能(应该是?)用预处理器指令完成了吗?
您将如何做到这一点,以确保代码是可移植的,并始终提供自定义类型的32位?
出于好奇,你会如何定义任意位长类型? (可能是你可以定义的上限?)
答案 0 :(得分:5)
#include <stdint.h>
exact width integer types!
int32_t
和uint32_t
有什么问题?这些是没有填充位的整数类型,正好是32个值位(uint32_t)或31个值位+一个符号位(int32_t)。如果它们存在,它们是最便携的。
但是,如果您需要至少 32位,但未指定确切的值位数,请使用(u)int_least32_t
。