大小端问题

    技术2022-07-11  120

    大小端问题

    计算机中,通常是以字节为基本存储单元,比如数据类型char占用大小为1byte,int为4byte,这个时候4个字节的存放顺序就是大小端问题。

    差异

    小端:数据的低位在内存的低地址,数据的高位在内存的高地址 0x12345678(数据位数从左至右依次降低)的小端字节序为 [0x78,0x56,0x34,0x12](地址从左至右依次升高)

    强制转换数据不需要调整字节内容

    强制转换数据 整型 0x12345678 [0x78,0x56,0x34,0x12] 强制转换成 char0x78 [0x78] 不需要调整字节内容 大端:数据的低位在内存的高地址,数据的低位在内存的高地址 0x12345678(数据位数从左至右依次降低)的打端字节序为 [0x12,0x34,0x56,0x78](地址从左至右依次升高)

    符号位的判定固定为第一字节,容易判断正负

    强制转换数据 整型 0x12345678 [0x78,0x56,0x34,0x12] 强制转换成 char0x78 [0x78] 要把高地址的字节放到低地址,需要调整字节内容

    如何判断大小端

    #include "stdafx.h" #include <stdio.h> #include <stdlib.h> union NODE { int i; char c; }; int main() { union NODE node; node.i = 0x12345678; printf("%x\n", node.c); system("pause"); return 0; } #输出0x78说明数据低位存储在低地址,是小端模式 #输出0x12说明数据高位存储在低地址,是大端模式 #include "stdafx.h" #include <stdio.h> #include <stdlib.h> int main() { int i = 0x12345678; char c = i; printf("%c\n", c); system("pause"); return 0; } #输出0x78说明数据低位存储在低地址,是小端模式 #输出0x12说明数据高位存储在低地址,是大端模式
    Processed: 0.010, SQL: 9