ios - float 如何用十六进制表示?

标签 ios floating-point type-conversion hex

我正在将数据从iPhone传输到从设备,其中传输需要16位数据值。现在,我有一个需要转换的浮点值,但是我如何知道它的大小以及如何用十六进制表示呢?

需要十六进制表示,因为我可能需要切换上下半字节。

最佳答案

如果您想了解详细信息,请在网上查找IEEE floating-point standard。但是要以十六进制表示,只需生成数字,获取各个字节,然后生成其十六进制表示。您需要知道的两件事是值的长度(例如sizeof(double))以及它是存储在“big-endian”还是“little-endian”中。 iOS设备始终为“little-endian”,这意味着该值的最低有效字节具有最低的内存地址。

获得字节的直接方法是创建一个unionfloat的C double和一个适当长度的unsigned char数组。将浮点值存储到联合中,然后检索unsigned char字节以转换为十六进制。您还可以使用适当的指针类型的类型转换来执行此“别名”。

union {
    float f;
    double d;
    unsigned char c[8];
} foo;

foo.d = 3.14156;
for(int i=0;i<8;i++) printf("%02X",foo.c[i]);

对于Java用户,不能使用并集和别名的情况下,在Float和Double上有以下类方法:
Float.floatToRawIntBits(floatValue)
Double.doubleToRawLongBits(doubleValue)

和它们的逆
Float.intBitsToDouble(intValue)
Double.longBitsToDouble(longValue)

请注意,它们不会进行类转换(例如,4.1 float将不会转换为4 int),而是将不变的位模式从float转换为整数格式。

关于ios - float 如何用十六进制表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11950343/

相关文章:

c# - 将存储在整数列表(小端)中的二进制表示形式转换为 Biginteger

c++ - 如何解决这个 : "cannot convert parameter 1 from ' const GLdouble' to 'const GLdouble *"?

ios - 当我在 swift 中为数据库 Firebase 中的 child 设置值时,什么也没有发生

ios - 如何使用 CNContactStoreDidChangeNotification 获取新添加的联系人标识符?

ios - UITableView cellForRowAtIndexPath : How to return no cell

ios - removeFromSuperview 函数不能正常工作

swift - 避免在受约束的字符集中出现双周期崩溃

java - 从字符串精确分配给 Float

python - 在 Windows 上模拟 Linux 的浮点字符串转换行为

vb.net - 将 `Double` 或 `Single` 转换为 `Integer` 的最简洁方法,无需舍入