C/C++中的可移植无符号长

portable unsigned long in C/C++

本文关键字:可移植 无符号 C++      更新时间:2023-10-16
  1. C++中是否存在可移植的无符号long
  2. 有没有办法制作一个便携式结构

在我的家用机器上,unsigned long是8字节。在工作机器上它有4个字节。当你在家里启动写在工作上的应用程序时,会出现网络传输数据的正确性问题。

谢谢。

#include <stdint.h>用于以下类型定义:

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

而最后一个可能可用,也可能不可用,具体取决于平台。

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

如果您有符合C99的C实现,则可以使用<stdint.h>来确保您使用的类型足够大,可以容纳您发送的数据。但即使这样也不够,因为你的工作机器和家用机器可能有不同的endianes或任何其他问题。<stdint.h>非常适合确保您的变量足够大,可以容纳所需的全部值,但它们不是确保您可以在网络上轻松传输数据的工具。

正如其他人所提到的,使用标准数据大小将起作用(例如,从stdint.h)

通过将这些数据类型与一些用于使数据结构更具可移植性的技术(如数据结构对齐)结合使用,可以使结构更具移植性。通常,这包括强制每个字段为一定数量的字节,然后在通过网络传输值、将值写入文件等之前将值复制到这些字节中。

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