是否有用于提供跨平台数据类型的C(不是C ++,Boost等)库?
详细说明,我希望将int
存储在32位Linux机器的文件中,从64位Windows机器读取文件和相同的int
。这可能吗?
更新:我也不想使用sqlite或某种数据库。我想要一个可以帮助我在整个代码中使用数据类型的库。
答案 0 :(得分: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];
}
如果您需要各种类型,请使用tpl,Eet,Avro,protobuf-c等库或XDR等标准的实施,JSON或ASN.1。如果您有大型数值数据集,请使用HDF或NetCDF。
答案 1 :(得分:3)
如果您的编译器知道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