我个人使用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
为什么在e6和f0之前有这么多'f',而我使用的是%.2x。
答案 0 :(得分:6)
你的功能应该是:
bool operator <(const MyStruct& Rhs) const
^^^^^
或
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
格式不限制输出数字,仅告诉printf结果字符串必须至少 2个字符长。
%2X
但已通过
值被截断为LSB。signed int
。规则是: 到原始访问内存,始终使用无符号类型。