如何显示float的字节数

时间:2016-01-28 09:38:14

标签: c

我个人使用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。

1 个答案:

答案 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

规则是: 到原始访问内存,始终使用无符号类型。