代码之家  ›  专栏  ›  技术社区  ›  Zach

在unix服务器上向文件写入额外零字节的流

  •  2
  • Zach  · 技术社区  · 7 年前

    为什么下面的代码在我的本地Windows机器上运行时使用Visual C++编写四个字节,但是当我上传到我学校的UNIX服务器时,还要写4个额外的0字节?

    unsigned long temp = 1025;
    ofstream file("test", ofstream::binary);
    file.write((char*)&temp, sizeof(temp));
    

    下面是在本地使用xxd的结果: 0104 0000

    以下是Unix服务器上的结果: 0104 0000 0000 0000

    我用什么模式打开文件有问题吗?

    1 回复  |  直到 7 年前
        1
  •  4
  •   ShadowRanger    7 年前

    long 具有实现定义的大小。Windows系统使用32位(4字节) 长的 (即使64位Windows也使用32位 长的 ;否则在64位操作系统上很少见),而我知道的大多数64位类unix系统都有64位(8字节) 长的 因为你在写 sizeof(temp) 字节,以及 temp unsigned long ,您将在不同的系统上获得不同的输出大小(如果您从小端到大端机器移动,也可能会遇到字节顺序问题)。

    如果需要一致的大小,请使用 <cstdint> ,例如 uint32_t uint64_t .

    推荐文章