大小端

在X86体中 数字是以小端形式存在 的

 小端的意思就是高字节 在高(内存) 地址,低字节在低(内存)地址

而大端正好相反 ,其 高字节 在低(内存)地址, 低字节 在高(内存)地址

例如 

int a=1;

int 在32位或64位机 中都是4个字节,即 00000000 00000000 00000000 00000001

第一组00000000 属于高字节

高字节 在内存高地址, 

内存低地址                                                                               内存高地址            

---------------------------------------------------------------------------------------------->

000000001 00000000 00000000 00000000

用一个程序证明下

#include <stdio.h>
#include <stdlib.h>

int main(){
    int a=1;

    char b[4];
    b[0]= (char)a;
    b[1] = (char)(a>>8);
    b[2] = (char)(a>>16);
    b[3] = a>>24;

    int c=0;
    c = (int)b[0] | (int)b[1] <<8 | (int)b[2] << 16| (int)b[3];
    printf("转后的数值为%d
", c);
    return 0;
}

(gdb) p a
$1 = 1

(gdb) p &a
$3 = (int *) 0x7fffffffe4cc
(gdb) x/4bu 0x7fffffffe4cc
0x7fffffffe4cc: 1 0 0 0

转后的数值为1

如果要通过程序存储为大端模式呢

#include <stdio.h>
#include <stdlib.h>

int main(){
    int a=1;

    char b[4];
    b[0]=(char)a>>24;
    b[1]=(char)a>>16;
    b[2]=(char)a>>8;
    b[3]=(char)a;

    int c=0;
    c = (int)b[0]<<24 | (int)b[1] <<16 | (int)b[2] << 8| (int)b[3];
    printf("转后的数值为%d
", c);
    return 0;
}

(gdb) p b
$1 = "00000001"
(gdb) p &b
$2 = (char (*)[4]) 0x7fffffffe4c0
(gdb) x/4bu 0x7fffffffe4c0
0x7fffffffe4c0: 0 0 0 1

原文地址:https://www.cnblogs.com/taek/p/7521137.html