数据类型是系统依赖于C的,并且它们的位长可能会因不同的机器而发生变化。我知道< inttypes.h>标头,提供固定宽度的整数数据类型。但是,此标头保证提供的数据类型具有至少指定的位数N. (Wiki page)
但我需要在我的应用程序中使用具有精确位长的数据类型。例如,如果数据类型为uint16_t,则应为16位,而不是至少 16位。现在我的问题是:我可以使用“unsigned char”和“char”数据类型定义新的整数数据类型(因为它们将在每台机器中为8位)作为主要的构建块吗?我可以实现相关的算术运算和超载算术运算符,如“+”吗?或者还有其他解决方案吗?
编辑:我的确切问题是关于DES这样需要固定位的加密算法的实现。
答案 0 :(得分:2)
您可以通过在结构中使用位字段来实现。您可以将位数设置为所需的长度。 例如: -
struct defineInt{
int a:16;
};
答案 1 :(得分:1)
c规范中没有任何内容可以保证char是8位,但很不错。
答案 2 :(得分:1)
如果您需要具有确切位数的类型,请使用int24_t
或uint16_t
等类型 - 它们保证具有确切的位数。 C分别提供类似int_least8_t
的类型,但您需要的是uint16_t
并且您不需要实现任何内容。
答案 3 :(得分:0)
已经存在一个int类型,它保证stdint.h中的“至少”N位int_leastNN_t
可用。
此外,您可以通过声明一个typedef来“自己动手”,该类型根据当前体系结构或sizeof
特定的int大小来为特定的int类型添加别名。
答案 4 :(得分:0)
不要(重新)使用char。定义你自己的类型。
对于Cxx11,请查看char16_t和家人
- char用于8位代码单元,
- char16_t用于16位代码单元,和
- char32_t用于32位代码单元。