C/C++ 关于大小端模式

大端模式:  数据的高字节存在低地址  数据的低字节存在高地址

小端模式:  数据的高字节存在高地址  数据的低字节存在低地址

如图,i为int类型占4个字节,但只有1个字节的值为1,另外3个字节值为0;取出低地址上的值,当其为1时则为小端模式,为0时为大端模式。

//大小端模式的判断
//方法一:利用联合体所有成员的起始位置一致,
//对联合体中的int类型赋值,然后判断联合体中char类型的值的大小

void SysCheck()
{
	union IsLitte_Endian
	{
		int i;
		char c;
	};
	IsLitte_Endian Check;
	Check.i = 1;
	bool Flag=Check.c == 1;	//Flag为true表示是小端模式,Flag为false表示为大端模式,此时Flag为true。
	return;
}

//方法二:利用强制类型转换判断
//与共用体判断类似
bool IsLitte_Endian()

{

	int Wvar = 0x12345678;

	short *Pvar = (short*)&Wvar;

	return !(0x1234 == Pvar[0]);

}

此时说明该编译器为小端模式。

CSDN地址:http://blog.csdn.net/lyl_312/article/details/51405553

时间: 2024-12-21 07:13:23

C/C++ 关于大小端模式的相关文章

union关键字及大小端模式

1. union 关键字 union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在 union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址.例子如下: union StateMachine { char character; int number; char *str; double exp; }; 一个 union 只配置一个足够大的空间以来容纳最大长度的数据成员,以上例而言,最大长度是 double 型

[Linux] Big-endian and Little-endian (大小端模式)

大小端模式 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放: 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致.

大小端模式详解

http://www.cnblogs.com/xinsheng/archive/2012/04/18/2455039.html 端模式(Endian)的这个词出自Jonathan Swift书写的<格列佛游记>.这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian(这句话最为形象).小 人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian

内存的大小端模式

因为不明白为什么图像的数据会以BGR而不是RGB的方式存放到内存中,扯出了以前在计算机组成原理中学习过的内存大小端模式.记录下来,方便以后再复习. 在计算机系统中,内存的管理以字节为单位,1 byte=8 bit,一个字节的内容在内存中的存放顺序是固定的. 在C语言中,很多类型大小超过了1byte,例如int通常是4byte,多个字节的数据在内存中可以用两种方式对齐来排放,这两种方式就是大端模式和小端模式. 如:0x12345678 其中0x12是高位的数据,0x78是低位数据. 在内存中,可以

经典笔试题:用C写一个函数测试当前机器大小端模式

“用C语言写一个函数测试当前机器的大小端模式”是一个经典的笔试题,如下使用两种方式进行解答: 1. 用union来测试机器的大小端 1 #include <stdio.h> 2 3 union test 4 { 5 int a; 6 char b; 7 }; 8 9 int endian_test(void) 10 { 11 union test t1; 12 t1.a = 1; 13 return t1.b; 14 } 15 16 int main(void) 17 { 18 int i =

【转】htonl(),htons(),ntohl(),ntons()--大小端模式转换函数

转自 http://www.cnblogs.com/kungfupanda/archive/2013/04/24/3040785.html 不同机器内部对变量的字节存储顺序不同,有的采用大端模式(big-endian),有的采用小端模式(little-endian).大端模式是指高字节数据存放在低地址处,低字节数据放在高地址处.小端模式是指低字节数据存放在低地址处,高字节数据放在高地址处. 在网络上传输数据时,由于数据传输的两端可能对应不同的硬件平台,采用的存储字节顺序也可能不一致,因此 TCP

大小端模式和位域详解(转载)

端模式(Endian)的这个词出自Jonathan Swift书写的<格列佛游记>.这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian(这句话最为形象).小 人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开.在计算机业Big Endian和Little Endian也几乎引起一场战争.在计算机业界,Endian表示数据在存储器

从内存中堆栈的分配格局解析大小端模式

今天找了一整天的资料,企图弄懂大小端模式的区别,但是弄了很久还是弄不懂.后面尝试从内存中的分配格局来区别,找了大.小端模式下的内存分配格局进行比较,就弄懂了. 先贴出基本知识: 所谓的大端模式Big-endian,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放: 所谓的小端模式Little-endian,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中,这种存储

大小端模式与网络字节序

一.为什么会出现大小端模式? 不同的cpu采用的大小端模式不一致.X86是小端模式.而KEIL C51则为大端模式.很多的ARM,DSP都为小端模式.有些ARM处理器还可以由硬件来选择是大端模式还是小端模式. 二.大小端模式的不同带来的问题是什么?如何解决? 如果存在数据网络传输,如果大小端模式不一致,如果不经过转换,必然会导致数据不致,出现错误. 解决方法:统一将网络上传输的字节序采用同一种模式(大家都知道的),这样收发数据时,就会根据主机对应的模式是否和网络字节对应的模式一致,来判断是否需要