【发布时间】:2017-03-31 22:29:29
【问题描述】:
我最近一直在玩 C 套接字,我设法在客户端和服务器之间交换文件。但是我偶然发现了这个问题:在我的 mac(64 位)和树莓派(32 位)之间发送文件大小时,它失败了,因为 size_t 在两者之间是不同的。我通过切换到uint64_t解决了。
- 我想知道,用它代替
size_t是不是一种不好的做法,size_t是在 fread()、fwrite()、read()、write()、stat.size 的所有原型中定义的? -
uint64_t在树莓派上会变慢吗?
【问题讨论】:
-
我会说不,因为
intxx_t类型保证在任何地方都是相同的大小,而int、long、size_t等则不是。 -
你也可以发送一个字符串而忘记这些问题。
-
根据您希望它的便携性,您还必须考虑字节序。在所有形式的数据通信中,您发送的数据的大小和格式都应由通信协议指定。
-
@Lundin 所以我应该在发送时使用 htonl() 并在接收后使用 ntohl() ,对吧?
-
如果您环顾四周,有很多
htonl()和ntohl()的 64 位实现可用。
标签: c sockets types cross-platform