1

我有一个在无符号字节数组中收到的值,我想将其取消引用为浮点数。将 ptr 作为 uint8_t* 指向四个值 0,0,0xCD,0x42 的字节数组(这是一个小端系统)。

float val = *(float*)ptr;

返回 -1.34e8

当我输入:

*(float*)ptr;

在该部分代码中遇到断点后的表达式窗口中,它按预期给了我 102.5。此外,当我输入:

*(float*)(ptr - 1);

我得到不正确的 -1.34e8,好像编译器使用 ptr - 1 而不是我输入的内容。

我很困惑 - 我在这里错过了什么吗?

4

2 回答 2

3

基本上 deref 是正确的。

如果你printf("%p", ptr);得到一个可能不是 4 字节对齐(或至少 2 字节对齐)的地址?这在某些平台上可能是必要的。

为了测试,只需在 uint8_t* 中传递一个真正的浮点值,例如

float f= 102.5; 
yourfunct((uint8_t*)&f); 

看看这是否有效。

于 2013-06-11T20:07:36.830 回答
0
*(float*)(ptr - 1); 

和这个一样

ptr--; //move the pointer to point to charackter in front of the previous one
*(float*)ptr;

这是你的意图吗?还是您只想从指向 ptr 的值中减去 1。

于 2013-06-11T19:25:01.720 回答