C / C ++中的unsigned unsigned long

时间:2011-06-16 21:18:18

标签: c++ c portability

  1. C ++中是否有可移植的unsigned long?
  2. 有没有办法制作便携式结构?
  3. 在我的家庭计算机上,unsigned long是8个字节。在工作机上它的4个字节。 当您在家工作时,在工作中写入的应用程序存在通过网络传输数据的正确性问题。

    感谢。

4 个答案:

答案 0 :(得分:8)

#include <stdint.h>以下typedef:

  • (u)int8_t
  • (u)int16_t
  • (u)int32_t
  • (u)int64_t

虽然最后可能会或可能不会,但取决于平台。

答案 1 :(得分:5)

然后不要这样做。使用protocol buffers之类的东西通过网络传输内容。将结构转储到文件描述符中只是一个坏主意,你不应该这样做。

如果你有C99兼容的C实现,你可以使用<stdint.h>,以确保你使用的类型足够大,可以保存你发送的数据。但即使这还不够,因为您的工作机器和家用机器可能会有不同的结束或任何其他问题。 <stdint.h>非常适合确保您的变量足以容纳他们需要保留的全部值,但它们不是确保您可以通过网络传输数据而不会头疼的工具。< / p>

答案 2 :(得分:2)

正如其他人所提到的,使用标准数据大小是有效的(例如来自stdint.h。)

通过使用这些数据类型以及用于使数据结构更具可移植性的一些技术,您可以使结构更具可移植性,例如data structure alignment.通常,这涉及将每个字段强制为一定数量的字节然后在通过网络传输它们之前将值复制到这些字节中,将它​​们写入文件等等。

答案 3 :(得分:0)

大多数平台都有可以使用的名为uint32_tuint64_t等的typedef。据我所知,这些不是标准的,但我使用的每个平台都有它们。