大小端定义:

大端存储模式 :是指 数据 的低字节保存在 内存 高地址 中,而数据的高字节保存在内存的低地址中
小端存储模式 :是指 数据 的低字节保存在 内存 低地址 中,而数据的高字节保存在内存的高地址中

举例:已知本机是小端存储模式,如下定义及赋值语句:

union
{
unsigned int   u32;
unsigned short u16[2];
unsigned char  u8[4];
}endianOrder;
// htonl是将int型整数字节序由主机字节序转为网络字节序
endianOrder.u32 = htonl(0x12345678);

endianOrder.u8[0]=?,endianOrder.u8[1]=?,endianOrder.u8[2]=?,endianOrder.u8[3]=?

endianOrder.u16[0]=?,endianOrder.u16[1]=?

程序如下

#include <stdio.h>
#include <arpa/inet.h>

#define TRUE   1
#define FALSE  0


int CurSystemIsLittleEndian(void)
{
unsigned int data = 1;// 1:0x00 00 00 01
unsigned char *ptr = (unsigned char *)&data;
if(*ptr == 1) return TRUE;
return FALSE;
}

int main(int argc, char *argv[])
{
// 1:首先确定当前系统是小端存储还是大端存储
if(CurSystemIsLittleEndian())
{
printf("==>当前系统存储模式是小端模式<==\n");
}
else
{
printf("==>当前系统存储模式是大端模式<==\n");
}
// 2:以union联合体分析
union
{
unsigned int   u32;
unsigned short u16[2];
unsigned char  u8[4];
}endianOrder;
// htonl是将int型整数字节序由主机字节序转为网络字节序
endianOrder.u32 = htonl(0x12345678);
printf("u32 addr=%p u32 value=0x%08x\n", &endianOrder.u32, endianOrder.u32);
// 打印u32对应4个字节的地址和数据
unsigned char *u8ptr = (unsigned char *)&endianOrder.u32;
printf("u32 addr  [0~3][%p] [%p] [%p] [%p]\n", u8ptr,  u8ptr+1,    u8ptr+2,     u8ptr+3);
printf("u32 value [0~3][%x] [%x] [%x] [%x]\n", *u8ptr, *(u8ptr+1), *(u8ptr+2),*(u8ptr+3));
// 打印u16
unsigned short *u16ptr = (unsigned short *)&endianOrder.u32;
printf("u16 addr  [0~1][%p] [%p]\n", u16ptr, u16ptr+1);
printf("u16 value [0~1][%x] [%x]\n", *u16ptr, *(u16ptr+1));

printf("u8 value[0~3][%x][%x][%x][%x]\n", endianOrder.u8[0],endianOrder.u8[1],endianOrder.u8[2],endianOrder.u8[3]);
return 0;
}

运行结果:

==>当前系统存储模式是小端模式<==
u32 addr=0x7fff17185e80 u32 value=0x78563412
u32 addr  [0~3][0x7fff17185e80] [0x7fff17185e81] [0x7fff17185e82] [0x7fff17185e83]
u32 value [0~3][12] [34] [56] [78]
u16 addr  [0~1][0x7fff17185e80] [0x7fff17185e82]
u16 value [0~1][3412] [7856]
u8 value[0~3][12][34][56][78]

大小端定义:大端存储模式:是指数据的低字节保存在内存的高地址中,而数据的高字节保存在内存的低地址中小端存储模式:是指数据的低字节保存在内存的低地址中,而数据的高字节保存在内存的高地址中举例:已知本机是小端存储模式,如下定义及赋值语句:union{unsigned int u32;unsigned short u16[2];unsigned char u8[4];}endianOrder;// htonl是将int型整数字节序由主机... 计算机 硬件有两种储存数据的方式: 大端 字节序 (big endian)和 小端 字节序 (little endian)。 举例来说,数值0x2211使用两个 字节 储存:高位 字节 是0x22,低位 字节 是0x11。 大端 字节序 :高位 字节 在前,低位 字节 在后 小端 字节序 :低位 字节 在前,高位 字节 在后,即以0x1122形式储存。 怎么去记才不会出错呢? 其实只需要记住 小端 是低位 字节 存低位数据,高位 字节 存高位数据。(称为:低低高高) 同理:0x1234... #include &lt;string.h&gt; typedef unsigned char u int 8_t; typedef unsigned short u int 16_t; typedef unsigned int u int 32_t; void u8_to_u32(unsigned char* u8,unsigned int *u3... 网络 字节 与本地 字节 之间的转换函数: htonl ()--"Host to Network Long" ntohl()--"Network to Host Long" htons()--"Host to Network Short" ntohs()--"Network to Host Short" 之所以需... 在Linux和Windows 网络 编程时需要用到htons和 htonl 函数,用来将 主机 字节 转换为 网络 字节 。 在 Int el机器下,执行以下程 int main() pr int f("%...
文章目录1. 计算机 组成2.指令如何被执行1.1相关术语1.2程 1.3流程 1. 计算机 组成   当前 计算机 的组成最早是由冯诺依曼提出的"冯诺依曼体系结构",由控制器、运算器、存储器、输入设备、输出设备五部分组成,控制器是整个 计算机 的核心,对指令进行解释及控制。运算器的功能是对数据进行算数运算和逻辑运算。存储器存放程 及数据。输入是 计算机 采集外部信息的方式,而输出是将内部的信息显示出来。 2.指令如何被执行   指令的执行经过三个阶段,取指、译码、执行,以下面程 为例子,截取部分片段,介绍指令的执行情况(c
PUBLIC    DESCRIPTOR    gdt[GDT_SIZE]; PUBLIC    void*    memcpy(void* pDst, void* pSrc, int iSize); 然后看memcpy(&gdt,(void*)(*(