通过TCP / IP在机器之间传输二进制数据时处理64位/ 32位的策略

时间:2009-10-22 23:36:14

标签: .net serialization

我一直致力于一个项目,我需要传输大量的二进制数据,有些是Structs,enums,list等,有些是纯二进制数据,我正在尝试制定一个策略来处理问题时在64位编译和32位编译之间传输数据。

目前我将程序集标记为仅针对32位以避免此问题,但我想通过定位Any来打开并使用64位/ 32位。

我知道我“可以”使用序列化,但这会为传输增加相当多的额外数据,并且由于这些传输可以通过VPN等传输,因此决定不使用纯.Net序列化,因为增加了额外的开销

因此,当您执行此过程时,最好是:

  1. 向每个传输的数据块添加1个字节,指定用于在初始端对数据进行编码的bitsize
  2. 在系统之间的初始握手中添加1个字节,以指定将用于所有通信的位大小
  3. 不要使用默认数据类型(整数,短整数等),而是在数据中对它们进行编码,以便传输不依赖于系统变化的数据类型大小。

1 个答案:

答案 0 :(得分:1)

.Net保证Int32始终为32位:

  

Int32值类型表示已签名   值为整数的整数   负2,147,483,648到   正面2,147,483,647。

对于int类型,System.Int32只是an alias。对于.Net中的其他值类型(字节,短,长等)也是如此。

但是如果你想要证明,这是输出:

Console.WriteLine(int.MaxValue);
Console.WriteLine(sizeof(int));

在64位Windows Server 2008下的我的计算机上运行,​​目标是x64:

2147483647
4