linux结构体大小端,【转】位结构体+大小端模式
位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构比按位运算符更加方便
位结构定义的一般形式为:
struct 位结构名{
数据类型 [变量名]: 整型常数;
数据类型 [变量名]: 整型常数;
}位结构变量;
数据类型必须是整型(int char short)
例如:定义一个位结构
struct test{
char a: 8;
char b: 4;
char c: 3;
char d: 1;
}ch;
printf("%d\n",sizeof(struct test));
a:占用低字节的0~7共8位
b:占用高字节的0~3位
c:占用高字节的4~6位
d:占用高字节的第7位
输出多少?
(8+4+3+1)/8=2
struct info{
char name[8];
int age;
float pay;
unsigned char state: 1;
unsigned char pay: 1;
}workers;
sizeof(workers)=20
8+4+4+4(位结构体的大小应为最大成员的整数倍)
位结构体成员叫位域,注意事项:
1. 一个位域必须存储在同一个字节中,不能跨两个字节
struct bs
{
unsigned a:4
unsigned :0
unsigned b:4
unsigned c:4
}
在这个位域定义中,a占第一字节的4位,后4位填0表示不使用,b从第二字节开始,占用4位,c占用4位。
2.位域不允许越过定义它的数据类型
3.位域可以无位域名,这时它只用来作填充或调整位置。无名的位域是不能使用的
struct k
{
int a:1
int :2
int b:3
int c:2
};
#include
void main()
{
union
{
struct student
{
unsigned char s1:1;
unsigned char s2:3;
}x;
unsigned char c;
}v;
v.c=0;
v.x.s1=0;
v.x.s2=4;
printf("%d\n",v.c);
printf("%d\n",sizeof(struct student)); }
8(小端模式)
1
64(大端模式)
1
本题小结:
像intel的CPU是小端模式:
若左边是低位,右边是高位(不定),
如上面的例子中s1(0)比s2(100)先执行,先执行的一定是放低位,但s2的要反过来写(即001),在内存中表现为0
001,因为电脑是以字节为单位的,字节占八位,即后面四位补零,得:0001
0000,再有,小端模式是从高位读到低位的,即从右往左读,结果就是8;
像摩托罗拉的CPU是大端模式:
若左边是低位,右边为高位(自定),
如上面的例子中s1(0)比s2(100)先执行,先执行的一定是放低位,s2的不要反过来写(即100),在内存中表现为0
100,因为电脑是以字节为单位的,字节占八位,即后面四位补零,得:0100
0000,再有,大端模式是从低位读到高位的,即从左往右读,结果就是64;
#include
void main()
{
union
{
struct student
{
unsigned char s1:1;
unsigned char s2:2;
unsigned char s3:2;
}x;
unsigned char c;
}v;
v.c=0;
v.x.s1=0;
v.x.s3=2;
printf("%d\n",v.c);
printf("%d\n",sizeof(struct student)); }
16(大小端都是)
1
linux结构体大小端,【转】位结构体+大小端模式相关推荐
- 一个微软面试题--关于位结构体
含位域结构体的sizeof: 前面已经说过,位域成员不能单独被取sizeof值,我们这里要讨论的是含有位域的结构体的sizeof,只是考虑到其特殊性而将其专门列了出来. C99规定int.unsign ...
- 关于位结构体及位操作总结
c语言中 关于位结构体 及 位操作总结: 位结构体 (参考网址) 位域 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一 ...
- 关于位结构体 及 位操作总结
c语言中 关于位结构体 及 位操作总结: 位结构体 (参考网址) 位域 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一 ...
- 位结构体+大小端模式
位结构体+大小端模式 位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构比按位运算符更加方便 位结构定义的一般形式为: struct 位结构名{ 数据类型 [变量名]: ...
- C语言学习笔记11-结构体(struct、结构作为函数参数、结构数组)、联合体/共用体typedef; union(大、小端序)
C语言-结构类型 程序中的数据都需要有类型支撑,当数据很复杂时(不是简单的一个值,如时间信息:年月日时分秒6个数据需要作为一个整体),我们需要声明一个新的结构类型来描述这种复合的数据(可以包含很多不同 ...
- Linux下Socket编程中用send发送结构体
转自:http://tech.ddvip.com/2008-10/122543769687623.html Linux网络通信 Linux下多客户端聊天软件 Linux程序设计 Linux socke ...
- Linux下DIR,dirent,stat等结构体详解(转)
最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. 首先说说DIR这一结构体,以下为DIR结构体的定义: struct __dirstre ...
- Linux下DIR,dirent,stat等结构体详解
最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. 首先说说DIR这一结构体,以下为DIR结构体的定义: struct __dirstre ...
- linux socket 结构定义 send,Linux下Socket编程中用send发送结构体
Linux网络通信 Linux下多客户端聊天软件 最近在开发一个Linux下的聊天软件,好久没有做C语言的开发了,感觉到很多东西已经生疏了,这下又碰到用Socket传递结构体的问题,google了一下 ...
最新文章
- 计算机桌面文件夹删除如何找回,电脑删除文件如何恢复 误操作的一剂后悔药...
- 北京对无人车的热情,华尔街都感受到了
- php给留言分配id_如何使用php生成唯一ID的4种方法
- 【排序算法】— 手写堆排序
- 阿里云伯俊软件:强强联合,共建新生态
- 连载:阿里巴巴大数据实践—实时技术
- ionic overflow:auto失效
- 如何找出Fiori launchpad URL start_up请求发起的具体位置
- Bootstrap3 按钮状态提示
- python map什么意思_Python中map是什么意思
- Android_Bitmap_图片的二次采样并生成缩略图
- c# socket接收字符串_php 的 socket简单原理及实现
- Uabntu安装AWVS11以及破解
- java 解决世界最难数独
- 怎么查看linux系统硬盘,Linux系统下如何查看所有存储设备(磁盘分区)
- Lattice PCIe 学习 1
- mybatis foreach
- JAVA incept_java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例
- 算法小解--剑指offer(一)
- git push问题:kex_exchange_identification: read: Connection reset by peer
热门文章
- 【Javascript】深入理解this作用域问题以及new/let/var/const对this作用域的影响
- 移动网页广告引入mraid.js使用指南
- Vue SSR(Vue2 + Koa2 + Webpack4)配置指南
- oracle 中查询当前用户可以看到的表名、表对应的所有字段
- jq根据文本显示内容设置样式
- 全排列递归实现(二)
- mips语言实现 f(n) = f(n-1) + 2*f(n-2) + 3*f(n-3)
- GridView 的EmptyDataText 及 EmptyDataTemplate
- python调试_Python 调试
- android l camera no panorama,Android Camera从App层到framework层到HAL层的初始化过程