C中的位域与大小端问题

转载 2015年07月08日 14:43:18

大小端是数据在内存中存放的两种顺序。
大端:
是指先从高(大)地址分配内存。
小端:
是指先从低(小)地址分配内存。
所以,对于int型数值0×12345678的保存方式如下:
(假设保存在0开始的地址中)
CPU先存数据的低位。
大端:
地址:[00][01][02][03]
数值: 12 34 56 78
小端:
地址:[00][01][02][03]
数值: 78 56 34 12
对于C中的位域,也是同样的原理。
对于定义如下的结构体:
struct yaabou_com{
int a:1;
int b:2;
int c:3;
int d:4;
int e:5;
int f:6;
int g:11;
};
大端:
地址:[00000000][00000001][00000002][00000003]
数据:|abbcccdd||ddeeeeef||fffffggg||gggggggg|
小端:
地址:[00000000][00000001][00000002][00000003]
数据:|ddcccbba||feeeeedd||gggfffff||gggggggg|

所以如果大端定义了上面的结构体,小端要定义相反的结构体:
struct yaabou_com{
int g:11;
int f:6;
int e:5;
int d:4;
int c:3;
int b:2;
int a:1;
};
所以,一定要做网络字节序转换!
上面还有一个问题,对于小端来说,g是如何存放的呢?
如下:
小端:
地址:[00000000][00000001][00000002][00000003]
数据:|ddcccbba||feeeeedd||gggfffff||gggggggg|
位: |________||________||________||1_______|
:: |________||________||210_____||09876543|

读书笔记:大小端模式对位域的影响

一、位域 有些信息在存储时不占用一个完整的字节,而只需要占用几个甚至一个二进制位。为节省存储空间,并使处理简便,C语言提供了一种数据结构,成为”位域“或”位段“。C与C++允许指定占用特定位数的结构...
  • Rainloving
  • Rainloving
  • 2015年07月21日 09:38
  • 2008

C位域与大小端字节序 间关系

C位域 大端 小端 字节序
  • feng2008ao
  • feng2008ao
  • 2016年05月22日 21:12
  • 2669

内存的字节存储大小端问题(一)

Big-endian和little-endian是描述排列存储在计算机内存里的字节序列的术语。 Big-endian是一种大值的一端(序列中更典型值)存在前面(在最小的存储地址)的顺序。Little-...
  • suxinpingtao51
  • suxinpingtao51
  • 2013年09月18日 16:31
  • 3082

C中的位域与大小端问题

端模式分为:大端字节序和小端字节序,也就是字节在内存中的顺序。   内存中地址存放数据的顺序是:由低到高。 大端字节序:高字节存于内存低地址,低字节存于内存高地址。如一个lo...
  • dongfangjing
  • dongfangjing
  • 2016年03月07日 20:07
  • 347

大小端,以及位域问题。

大小端 端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头...
  • opah521
  • opah521
  • 2011年06月17日 01:17
  • 944

bit 位域大小端转换问题

计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器...
  • liming0931
  • liming0931
  • 2012年07月06日 11:18
  • 3495

C中含位域结构体大小的计算

含位域结构体的sizeof:  前面已经说过,位域成员不能单独被取sizeof值,我们这里要讨论的是含有位域的结构体的sizeof,只是考虑到其特殊性而将其专门列了出来。C99规定int、unsig...
  • u010575913
  • u010575913
  • 2014年04月03日 17:47
  • 384

关于C++ 中大小端和位域

关于C++中的大小端、位段(惑位域)和内存对齐   听到好几个朋友说到去一些公司做面试,总是遇到关于大小端、位段(或者叫位域)和内存对齐的考题,然后就不知所措了。虽然我认为很多开发根本就用不到这...
  • luoye7422
  • luoye7422
  • 2015年03月22日 23:22
  • 796

关于C++中的大小端、位段(惑位域)和内存对齐

听到好几个朋友说到去一些公司做面试,总是遇到关于大小端、位段(或者叫位域)和内存对齐的考题,然后就不知所措了。虽然我认为很多开发根本就用不到这个,但是我认为很有必要学习理解这些知识点,因为它可以让你更...
  • LEAKERS_ZZW
  • LEAKERS_ZZW
  • 2012年10月22日 10:54
  • 1242

关于大小端、位域的一些概念

大小端:   对于像C++中的char这样的数据类型,它本身就是占用一个字节的大小,不会产生什么问题。但是当数制类型为int,在32bit的系统中,它需要占用4个字节(32bit),这个时候就会产生这...
  • u010562250
  • u010562250
  • 2013年07月17日 16:22
  • 437
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C中的位域与大小端问题
举报原因:
原因补充:

(最多只允许输入30个字)