我个人使用show_bytes函数,如下所示:
#include<stdio.h>
typedef char *byte_pointer;
void show_bytes (byte_pointer x)
{
int length = sizeof(float);
int i;
for(i = 0;i <length;i++)
{
printf("%2x",*(x+i));
printf("\n");
}
}
int main()
{
float obj;
printf("please input the value of obj:");
scanf("%f",&obj);
show_bytes((byte_pointer) &obj);
}
当我输入120.45时,应为0x42f0e666
please input the value of obj:120.45
66
ffffffe6
fffffff0
42
为什么在我使用%.2x时在e6和f0之前有那么多“f”。
最佳答案
您的功能应为:
void show_bytes (byte_pointer x)
{
int i;
for(i = 0; i <sizeof(float); i++)
{
printf("0x%2X\n", (unsigned int)(*(x++) & 0xFF));
}
}
或者
typedef uint8_t *byte_pointer;
void show_bytes (byte_pointer x)
{
int i;
for(i = 0; i <sizeof(float); i++)
{
printf("0x%2X\n", *(x++));
}
}
在您的代码中,问题在于指针类型为
signed
,而指针类型由signed int
提升为printf
。%2X
格式不限制输出位数,仅告诉printf结果字符串必须为,至少 2个字符长。signed int
,但将其传递给值被截断到LSB。
是
unsigned char
。 规则是:到原始访问内存,始终使用未签名的类型。