繁体   English   中英

从32位计算机转移到64位计算机的通用结构

[英]Generic structure to transfer from 32 bit machine to 64 bit machine

我们在32位计算机上运行的代码中使用以下结构。 如果我们必须将此结构转移到64位计算机上,是否需要进行任何更改?

   struct test
   {
     int num;
     char a;
     double dd;
   };

我在网络上有两台计算机,并且我有两个传输数据,从上述结构中存储了从32位计算机到64位计算机的数据,因此如何使上述结构成为通用结构,这样数据就不会丢失...这是我的问题。

这种结构的布局完全依赖于平台,您甚至不能使用它在使用不同编译器或同一编译器下不同编译设置编译的32位应用程序的两个实例之间传输数据。

在数据传输中,这种结构的唯一安全用途是在同一可执行文件的多个实例之间。 与以下内容相同:相同版本。 您甚至无法通常保证以后的某些版本将具有相同的结构。

要以二进制兼容的方式传输二进制数据,您需要使用某种二进制流,该二进制流可维护固定的二进制结构,而与平台无关。 Google协议缓冲区就是这样的一个例子,另一个是Qt的QDataStream

通常,该结构真的不足以用于网络或持久性目的,因为它以太多方式依赖C实现(编译器+平台)。

“传输”取决于您对struct和所包含元素的处理方式。

这些项目应该在您的清单上:

  • 检查元素的值范围。 所有使用的类型可能会改变宽度。 char可能会更改签名。
  • 检查整个结构的大小。 这对于依赖特定大小或某些任意界限的代码可能很重要。
  • 当离开进程的地址空间(网络或永久存储)时,请确保正确迁移结构,包括。 结局,大小,对齐方式。

一切都很大程度上取决于不同平台上使用的C实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM