例如,32 位的 int 值0x037fb4c7(十进制的 58,700,999)
当数值的高位先放入内存的低地址时为大端字节顺序:
| 值 | 内存地址 | |
| c7 | 0xE3 | 高地址 |
| b4 | 0xE2 | |
| 7f | 0xE1 | |
| 03 | 0xE0 | 低地址 |
当数值的低位先放入内存的低地址时为小端字节顺序:
| 值 | 内存地址 | |
| 03 | 0xE3 | 高地址 |
| 7f | 0xE2 | |
| b4 | 0xE1 | |
| c7 | 0xE0 | 低地址 |
测试计算机是否为大端小端的代码为:
unsigned int i=0x037FB4C7;
char j=0xC7;
if(j==(*((char*)(&i)))) //为true时则为小端,为false时则为大端.
{std::cout<<"小端";}
else
{std::cout<<"大端";}
Java中的ByteBuffer 类:默认字节顺序总是 ByteBuffer.BIG_ENDIAN,无论系统的
固有字节顺序是什么。Java 的默认字节顺序是大端字节顺序,这允许类文件等以及串行化的
对象可以在任何 JVM 中工作。如果固有硬件字节顺序是小端,这会有性能隐患。在使用固有
硬件字节顺序时,将 ByteBuffer 的内容当作其他数据类型存取很可能高效得多.

本文详细解释了大端与小端字节序的概念,并通过具体例子展示了这两种字节序在内存中的表现形式。同时介绍了如何通过简单的代码测试计算机采用的是哪种字节序,并探讨了Java中ByteBuffer类对于字节序的处理方式及其潜在的性能影响。
5271

被折叠的 条评论
为什么被折叠?



