首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++跨平台数据类型库

问C++跨平台数据类型库
EN

Stack Overflow用户
提问于 2012-07-29 03:21:21
回答 2查看 498关注 0票数 0

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

为了详细说明,我想在32位linux机器上的一个文件中存储一个int,然后从64位windows机器上读取该文件和相同的int。这是可能的吗?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-29 04:09:54

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

代码语言:javascript
复制
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之类的东西。

票数 5
EN

Stack Overflow用户

发布于 2012-07-29 03:43:24

如果您的编译器了解C99标准,那么您可以直接使用int32_t

http://en.wikipedia.org/wiki/C_data_types#Fixed_width_integer_types我想你的操作系统应该有相同的字节顺序。在x86和x86_64上的Windows和Linux都是小端的,所以它应该可以工作。http://en.wikipedia.org/wiki/Endianness#Endianness_and_operating_systems_on_architectures

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11703949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档