2016-11-17 130 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

相關問題