字节序
来源:互联网 发布:淘宝部门及职能 编辑:程序博客网 时间:2024/05/22 14:44
1、
unsigned int a =0x01030507;
在内存中的表示如下:
在内存的低地址处0x003CF758 存储0x0507 在内存高地址处存储0x0103.
unsigned int c=0x04030201;
变量c 最大存储0xff ff ff ff 字节。
2、
unsigned int c=0x04030201; 在内存中的地址和内容 0x003DFA8C 01 02 03 04 .
unsigned short sh =*((unsigned short*)&c);
当对 变量c 先进行取地址符,然后禁止强制转换后的内存地址和内容 。0x003DFA80 01 02 cc cc
此时 sh的值为 0x0201.因为sizeof(unsigned short) =2. c=513
&sh的地址和内容如下:
char ch = *(char *)&c;
&ch 的地址和内容如下:
此时 ch变量的值为 0x0x c=1
总结:在小端情况下, 强制转换时,如果从宽字节,转换到窄字节时,只会保留 sizeof(窄字节)长度的内存低地址的内容。
3、
①
unsigned int c=0x04030201; //定义无符号变量 c 变量c高位字节为 0x0403 变量c地位字节为0x0201.
在内存地址和内存内容如下:
②
unsigned short sh =*((unsigned short*)&c);
对变量c 强制转换后 变量sh内存地址和内存内容如下:
因为 sizeof(unsigned short) 长度为2 . 只保留 低位字节内容 0x 02 01. 高位字节内容此时为0x cc cc.为脏数据。
③
unsigned int rawsh =*((unsigned int*)&sh);
对 sh 变量通过强制转换后,内存地址和内容如下:
④
此时,rawsh = 0xcccc0201 rawsh = 3435921921 此时通过地址来强制转换。内存中内容已经改变,高位地址数据已经为脏数据。
⑤
unsigned int rawsh2 =(unsigned int)sh2;
但是通过类型强制转换后,内存地址和内容如下:
rawsh2 = 513 rawsh2 = 0x00000201 此时值为513 高位地址被强制为零。没有脏数据。
unsigned int c=0x04030201;
unsigned short sh =*((unsigned short*)&c);
unsigned short sh2=(unsigned short)c;
unsigned int rawsh =*((unsigned int*)&sh);
unsigned int rawsh2 =(unsigned int)sh2;
unsigned char ch = *(unsigned char *)&c;
char ch2=(unsigned char)c;
unsigned char rawch =*((unsigned int*)&ch);
unsigned char rawch2 =(unsigned int)ch2;
如果判断大小端:
unsigned short flag = 0x1234;
char e = *(char *)&flag; //通过将int强制类型转换成char单字节,通过判断起始存储位置。即等于 取b等于a的低地址部分
if(e==0x34)
{
//0x34 为低位字节. char e的取值为 flag的低位地址。如果低位字节放在低位内存上则为小端。
cout<<"litte endian"<<endl;
}
else
{
cout<<"big endian"<<endl;
}
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 字节序
- 一个球从100米高的自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。求第 10次落地时,共经过多少米,第10次反弹多高。
- 横竖屏切换时候Activity的生命周期变化
- xargs
- CRC的校验原理
- iOS著名开源项目大全
- 字节序
- 数据挖掘学习笔记3: 关联规则1
- Python中url.py的配置
- 几大最短路径算法比较
- sudo与sudoers
- Java中接口和抽象类的区别与联系
- 【转】对信息学竞赛中调试方法的建议
- 棋盘问题 poj1321
- Android Activity 生命周期的透彻理解