所以我想验证语言C中数字1.0的十六进制表示,下面是我的代码:
int main(int argc, char **argv)
{
void showBytes(unsigned char * p,int size){
int i;
for (i=0;i<size;i++){
printf("%.2x",p[i]);
}
}
float f;
f=1.0;
showBytes((unsigned char *)&f,sizeof(f));
return 0;
}
当我构建并运行我的程序时,我得到39300000,这不是1.0(00003039)的正确表示。任何人都可以向我解释为什么我得到这个不正确的价值?感谢!!!
答案 0 :(得分:10)
这是一个字节不匹配。您正在使用一个字节顺序约定显示该值,但您的预期值使用另一个约定。
字节顺序是整数数据类型的一个众所周知的问题,但它可能不太为人所知,字节顺序也会影响浮点表示。