1
2
更新之后,您提到将使用UDP传输数据,并询问最佳实践。我强烈建议将数据作为文本发送,甚至添加一些标记(XML)。在传输线上调试与endian相关的错误是浪费所有人的时间。 只是我在你问题的“最佳实践”部分的2分 |
2
12
我记得在下面的例子中,我第一次看到的是“rsqrt”程序中的老地震源代码,其中包含了当时我看到的最酷的评论(google it,你会喜欢的)。
我希望我已经正确理解了您的问题(和示例代码)。告诉我这是否有用? |
3
11
便携方式:使用
简单的方法:假设在2010年,您关心的任何机器都使用了ieee float,声明一个与
二进制文件讨厌的方式是:将所有内容序列化为文本,包括浮点。使用
|
4
8
这会将浮点值打包到
这对数字分别代表数字的指数部分和小数部分。
|
5
5
您可以在IEEE-754中进行可移植的序列化,而不管本机表示是什么:
在使用IEEE-754(即
常见案件
)你只需要做一个
注意:在本机双精度比IEEE双精度高的系统中序列化时,您可能会在低位遇到一个错误。 希望这有帮助。 |
6
3
关于
即使使用相同的表示,也可能不会以相同的字节顺序存储它。这将需要决定线路上的字节顺序,并在每一端调整代码。类型punned指针类型转换或联合将在实践中起作用。两者都是调用实现定义的行为,但只要您检查和测试就没什么大不了的了。 也就是说,文本常常是平台间转移浮点值的朋友。诀窍是不要使用太多真正需要转换回的字符。 总之,我建议您认真考虑一下使用图书馆,例如 XDR 这是强大的,已经存在一段时间,并已擦了所有尖锐的角落和边缘案件。
如果你坚持自己动手,要注意一些微妙的问题,比如
|
7
2
可以始终使用联合来序列化:
这并不比简单地将
对于float,只需替换
|
8
1
首先,你不应该假定
那么为了确保您不存在endianes的问题,这里有宏/函数
为了
如果你认为你可能对
|
Rik Bloemers · for循环不接受任何浮点变量 2 年前 |
zell · 为什么存储7个浮点数需要34字节? 2 年前 |
Atharva Sunil Sathe · 如何删除任意数的小数点? 2 年前 |
user1658887 · 为什么**2!=a*a一些彩车? 6 年前 |