C/C++中的unsigned unsigned long

nic*_*ick 2 c c++ portability

  1. C++中是否有可移植的unsigned long?
  2. 有没有办法制作便携式结构?

在我的家庭机器上,unsigned long是8个字节.在工作机上它的4个字节.当您在家中开始编写工作时,会出现通过网络传输数据的正确性问题.

谢谢.

Xeo*_*Xeo 8

#include <stdint.h> 对于以下typedef:

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

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

  • @fco:VC10至少有`<stdint.h>`. (2认同)

Omn*_*ous 5

那就不要那样做了.使用协议缓冲区之类的东西通过网络传输内容.将结构转储到文件描述符中只是一个坏主意,你不应该这样做.

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

  • 您还可以使用`htonl` /`ntohl` /`htons` /`ntohs`(POSIX函数)在`uint32_t`值和表示之间来回转换以通过网络. (2认同)