可移植代码 - 每个字符的位数

时间:2012-07-22 12:41:02

标签: c++ c char bits

我知道C / C ++标准只保证每个字符的8位最小,理论上9 / 16/42 /其他任何东西都是可能的,因此所有关于写入的网站都是可移植的代码警告不要假设8bpc。我的问题是“非便携式”这是真的吗?

让我解释一下。我认为,有三类系统:

  1. 计算机 - 我的意思是台式机,笔记本电脑,服务器等运行Mac / Linux / Windows / Unix / * nix / posix /等等(我知道这个列表并不完全正确,但是你得到这个想法)。听到char 8位的任何此类系统,我会感到非常惊讶。 (如果我错了,请纠正我)
  2. 带操作系统的设备 - 包括智能手机和此类嵌入式系统。虽然我发现这样一个系统char更多是8位,但我不会感到非常惊讶,但我还没有听说过一个这样的系统(如果我不知道的话,请再次通知我)
  3. 裸机设备 - 录像机,微波炉,旧手机等。在这个领域,我没有丝毫的经验,所以任何事情都可能发生在这里。但是,我真的需要我的代码在我的Windows桌面和微波炉之间跨平台吗?我可能有两个共同的代码吗?
  4. 底线:是否有常见(超过0.001%)平台(上面的类别1和2),其中char 8位?我的上述猜测是真的吗?

4 个答案:

答案 0 :(得分:21)

使用limits.h

CHAR_BIT

http://www.cplusplus.com/reference/clibrary/climits/

另外,当您想要使用完全给定的大小时,请使用stdint.h

答案 1 :(得分:5)

例如,许多DSPCHAR_BIT大于或等于16。

答案 2 :(得分:4)

至少,类似于64位架构中的整数大小,未来的平台可能会使用更多的字符,更多的位。 ASCII字符可能会过时,取而代之的是unicode。这可能是一个谨慎的原因。

答案 3 :(得分:0)

您通常可以安全地假设文件将具有8位字节,或者如果不是,则可以通过常用工具将8位字节文件转换为零填充本机格式。但是假设CHAR_BIT == 8更危险。目前几乎总是如此,但未来可能并非总是如此。 8位访问内存越来越成为瓶颈。