将数据从32位机器传输到64位机器,反之亦然

时间:2010-10-12 05:39:06

标签: tcp 32bit-64bit

数据通过IP从32位计算机传输到64位计算机(反之亦然)。由于数据将以网络字节顺序传输,因此在传输过程中不会出现问题。 问题:数据到达接收端时会出现问题吗? 如果有任何问题,应该注意什么,以避免任何问题?

3 个答案:

答案 0 :(得分:0)

不是问题......数据通常以字节形式存储(和传输),其大小通常为8位,并且不依赖于体系结构是32位还是64位。

系统规范的“32位”或“64位”部分通常指两件事:地址的大小(用于指向存储器的指针)和寄存器的大小(用于CPU计算) 。这对实际数据没有影响,无论是存储在磁盘上还是通过网络发送。

答案 1 :(得分:0)

在你所谈论的抽象层面上,应该没有问题。 32 vs 64不会影响套接字级别的网络通信。

答案 2 :(得分:0)

我认为前两位回答者已经误解了这个问题。 OP的评论表明他们正在将long从LP64系统转移到ILP32系统,可能都是x86。

在LP64 x86系统上,long基元类型是64位宽,最低有效字节优先。在ILP32 x86系统上,相同的long基本类型是32位宽,最低有效字节优先。

如果您使用long数据类型进行天真编码并来回传输数字,则会出现问题。您可能正在x86_64开发PC上进行调试,一切似乎都可以工作(有了memcpy()所有内容)并且它在i386系统上以神秘的方式打破,因为您试图将8个字节压缩成4个字节{{1 }}

这就是为什么long被引入C99标准库的原因。它允许您通过为整数指定精确宽度来编写更多可移植代码。如果需要64位宽的无符号整数,请使用stdint.h。此类型在ILP32和LP64 x86系统中不变。同样,如果您想要一个32位宽的有符号整数,请使用uint64_t。有关该主题的更多信息,请参阅维基百科上的this文章。