我正在为实时离岸模拟器编写客户端和服务器,并且由于我必须通过套接字发送大量数据,因此我使用二进制数据来最大化我可以发送的大量数据。我已经知道整数字节序,以及如何使用htonl和ntohl来规避字节序问题,但我的应用程序,就像几乎所有的模拟软件一样,处理大量浮点数。
我的问题是:是否存在一些处理浮点数二进制格式的字节序问题?我知道我的代码运行的所有机器都使用浮点运算的IEEE实现,但在处理浮点数时是否存在一些字节序问题?
由于我只能访问具有相同endian的计算机,因此我无法自行测试。所以,如果有人可以帮助我,我会很高兴。
提前致谢。
答案 0 :(得分:17)
根据Wikipedia,
浮点和字节序
在某些机器上,整数是 以小端形式表示, 浮点数是 以big-endian形式表示。 因为有很多浮点 格式,缺乏标准 “网络”代表,没有标准 用于传输浮点值 已经成了。这意味着 浮点数据写在一个上 机器可能无法读取 另一个,即使是这样的情况 两者都使用IEEE 754浮点 算术以来的字节序 记忆表示不是一部分 IEEE规范。
答案 1 :(得分:8)
是的,浮点可能依赖于endianess。有关信息,请参阅Converting float values from big endian to little endian,请务必阅读评论。
答案 2 :(得分:-6)
编辑:以下是错误的答案(留下让人们知道这种“有点受欢迎”的观点是错误的,请阅读接受的答案和对此答案的评论)
- 错误的回答 -
没有浮点字节序或整数字节等等。它只是二进制表示字节序。 机器是小端的,还是它的大端。这意味着它将代表任何数据类型的二进制表示中的MSb / MSB作为其第一个比特/字节或最后一个比特/字节。 而已。
- 错误答案---