我有一个在无符号字节数组中收到的值,我希望将其作为浮点数取消引用。将ptr作为uint8_t *指向一个包含四个值0,0,0xCD,0x42的字节数组(这是一个小端系统)。
float val = *(float*)ptr;
返回-1.34e8
当我输入:
*(float*)ptr;
在命中该段代码中的断点后的表达式窗口中,它按预期给出了102.5。此外,当我输入:
*(float*)(ptr - 1);
我得到错误的-1.34e8,好像编译器使用了ptr-1而不是我输入的内容。
我很困惑 - 我在这里错过了一些东西吗?
答案 0 :(得分:3)
基本上deref是正确的。
如果你printf("%p", ptr);
得到的地址可能不是4字节对齐(或至少2字节对齐)?在某些平台上可能需要这样做。
对于测试,只需在uint8_t *中传递一个实数浮点值,例如
float f= 102.5;
yourfunct((uint8_t*)&f);
看看是否有效。
答案 1 :(得分:0)
*(float*)(ptr - 1);
与此相同
ptr--; //move the pointer to point to charackter in front of the previous one
*(float*)ptr;
这是你的意图吗?
或者你只是想从被指向ptr的值中减去1。