C中的跨平台数据类型库

San*_*kar 0 c cross-platform

是否有用于提供跨平台数据类型的C(不是C++,Boost等)库?

详细说来,我想将int一个文件存储在一个32位的linux机器中,int从64位的Windows机器上读取该文件.这可能吗 ?

更新:我也不想使用sqlite或某种数据库.我想要一个可以帮助我在整个代码中使用数据类型的库.

Ant*_*hys 5

如果您只想存储32位有符号整数,则只需确定格式,例如big endian.然后,您可以自己编写序列化/反序列化:

void write_int32_be (int32_t i, FILE *f)
{
  uint8_t buf[4];

  buf[0] = ((uint32_t)i >> 24);
  buf[1] = ((uint32_t)i >> 16) & 0xFF;
  buf[2] = ((uint32_t)i >> 8) & 0xFF;
  buf[3] = (uint32_t)i & 0xFF;
  fwrite (buf, 4, 1, f);
}

int32_t read_int32_be (FILE *f)
{
  uint8_t buf[4];

  fread (buf, 4, 1, f);

  return ((uint32_t)buf[0] << 24) |
         ((uint32_t)buf[1] << 16) |
         ((uint32_t)buf[2] << 8) |
          (uint32_t)buf[3];
}
Run Code Online (Sandbox Code Playgroud)

如果您需要各种类型,请使用类似tpl,Eet,Avro,protobuf-c的库或XDR,JSON或ASN.1等标准的实现.如果您有大型数值数据集,请使用HDF或NetCDF.