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

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

让我解释。 在我看来,有三类系统:

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

底线:是否有共同(超过%0.001)平台(上面的类别1和2),其中char 不是 8位? 我的上述猜测是真的吗?

使用limits.h

CHAR_BIT

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

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

例如,许多DSP的 CHAR_BIT大于或等于16。

至少,类似于64位体系结构中的整数大小,未来的平台可能使用更宽的字符,具有更多位。 ASCII字符可能会过时,由unicode取代。 这可能是一个谨慎的理由。

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

    Interesting Posts