对于整数值,小端和大端表示法的区别相当简单。
但是对于我来说,小端浮点数与大端浮点数的区别不太清楚。
最后,我想知道哪种更常用。
对于整数值,小端和大端表示法的区别相当简单。
但是对于我来说,小端浮点数与大端浮点数的区别不太清楚。
最后,我想知道哪种更常用。
字节序是由构成多字节值的各个字节所决定的属性。浮点数占用4或8个字节,字节序告诉你应该以什么顺序读取它们。这与整数值完全相同。
一些资料称IEEE754浮点数总是以小端存储,但IEEE754浮点数规范并没有涉及字节序问题,因此可能因计算机而异。
以下是浮点数/字节数组转换的示例代码:
#include <stdio.h>
int main(int argc, char** argv){
char *a;
float f = 3.14159; // number to start with
a = (char *)&f; // point a to f's location
// print float & byte array as hex
printf("float: %f\n", f);
printf("byte array: %hhX:%hhX:%hhX:%hhX\n", \
a[0], a[1], a[2], a[3]);
// toggle the sign of f -- using the byte array
a[3] = ((unsigned int)a[3]) ^ 128;
//print the numbers again
printf("float: %f\n", f);
printf("byte array: %hhX:%hhX:%hhX:%hhX\n", \
a[0], a[1], a[2], a[3]);
return 0;
}
在小端机器上的输出:
浮点数:3.141590 字节数组:D0:F:49:40 浮点数:-3.141590 字节数组:D0:F:49:C0
理论上,在大端机器上,字节的顺序将会被颠倒。
参考资料: http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/