2016-11-17 132 views
2

我最近一直在玩C套接字,我设法在客户端和服务器之间交换文件。然而,我偶然发现了这个问题:当我的mac(64位)和覆盆子pi(32位)之间发送文件大小时,它失败了,因为size_t在两者之间不同。我通过切换到uint64_t解决。在这种情况下使用uint64_t是不好的做法吗?

  • 我想知道,这是一个不好的做法代替size_t,这是在FREAD(),fwrite()将所有的原型定义为使用它,阅读(),write()方法,stat.size ?
  • uint64_t在覆盆子pi上会变慢吗?
+3

我会说不,因为'intxx_t'类型保证在所有地方都是相同的大小,而'int','long','size_t'等不是。 – alain

+2

你也可以发送一个字符串,忘记这些问题。 – 2501

+2

根据您想要的便携性,您还需要考虑永久性。在所有形式的数据通信中,您发送的数据的大小和格式应该由通信协议_规定。 – Lundin

回答

3

这不仅是良好的做法,但最终的必要性。您不能在不同体系结构的不同计算机之间交换数据,而无需定义数据的格式和大小,并提供便携式解释方法。这些固定宽度类型的字面意思就是为了这个目的而设计的。

在32位平台上使用uint64_t比使用uint32_t慢吗?可能是。值得注意的?对此感到怀疑。但你可以测量它并找出答案。

别忘了account for differences in endianness

相关问题