是否有用于提供跨平台数据类型的 C(不是 C++、Boost 等)库?
详细地说,我想将int
一个文件存储在 32 位 linux 机器中,然后int
从 64 位 windows 机器中读取文件。这可能吗 ?
更新:我也不想使用 sqlite 或某种数据库。我想要一个可以帮助我在整个代码中使用数据类型的库。
是否有用于提供跨平台数据类型的 C(不是 C++、Boost 等)库?
详细地说,我想将int
一个文件存储在 32 位 linux 机器中,然后int
从 64 位 windows 机器中读取文件。这可能吗 ?
更新:我也不想使用 sqlite 或某种数据库。我想要一个可以帮助我在整个代码中使用数据类型的库。
如果您只想存储 32 位有符号整数,只需确定一种格式,例如大端。然后您可以自己编写序列化/反序列化:
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];
}
如果您需要多种类型,请使用tpl、Eet、Avro、protobuf-c等库或XDR、JSON或ASN.1等标准的实现。如果您有大型数值数据集,请使用HDF或NetCDF 之类的东西。
如果您的编译器了解 C99 标准,那么您可以使用int32_t
http://en.wikipedia.org/wiki/C_data_types#Fixed_width_integer_types 恕我直言,您的操作系统应该具有相同的字节序。x86 和 x86_64 上的 Windows 和 Linux 都是 little-endian,所以它应该可以工作。 http://en.wikipedia.org/wiki/Endianness#Endianness_and_operating_systems_on_architectures