c语言:union,大小端

union:

不允许只用联合变量名作赋值或其它操作。

也不允许对联合变量作初始化赋值,赋值只能在程序中进行。

小端存储:

以字节为单位,低存低,高存高。

任何数据在内存中都是以二进制(1或着0)顺序存储的,每一个1或着0被称为1位,而在x86CPU上一个字节是8位。比如一个16位(2字节)的 short int型变量的值是1156,那么它的二进制表达就是:00000100 10000100。由于Intel CPU的架构是Little Endian(小端存储,请参数机算机原理相关知识),所以它是按字节倒序存储的,那么就因该是这样:10000100 00000100,这就是定点数1156在内存中的结构。

linux代码中的用例:union判断大小端[1]

#include <stdio.h>

static union { char c[4]; unsigned long l; } endian_test = { { ‘l‘, ‘?‘, ‘?‘, ‘b‘ } };
#define ENDIANNESS ((char)endian_test.l)

void f1(void)
{
    printf("ENDIAN: %c\n" , ENDIANNESS);
}

int main()
{
    f1();
}
/*
[email protected]:/work/dcc# gcc *.c; ./a.out
ENDIAN: l
*/

  

引用:

1. http://21cnbao.blog.51cto.com/109393/120108

时间: 2024-11-07 23:42:19

c语言:union,大小端的相关文章

C语言之大小端问题

1:大小端名字的由来及发展 (1)在乔纳森·斯威夫特的著名讽刺小说<格列夫游记>中,小人国内部分裂成Big-endian和Little-endian两派,区别在于一派要求从鸡蛋的大头把鸡蛋打破,另一派要求从鸡蛋的小头把鸡蛋打破.斯威夫特借以讽刺英国的政党之争,在计算机工业中指数据储存顺序的分歧. (2)后来计算机通信发展起来后,遇到一个问题就是:在串口等串行通信中,一次只能发送1个字节.这时候我要发送一个int类型的数就遇到一个问题.int类型有4个字节,我是按照:byte0 byte1 by

【C语言】大小端的判断

在文章的开头我首先要介绍一下大小端的概念: 大端模式: 是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放: 小端模式: 是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致. 若将00000001放入计算机中就有两种方法: ----------------

【C语言】大小端判断。

(一)联合体判断大小端 首先大小端是什么? 如果我们判断第一个字节里存放的是不是 数字1,那么就可以确定其存储方式. #include <stdio.h> union DX { int a; char c; }un; int main () { un.a = 1; if(un.c == 1) { printf("小端存储\n"); } else { printf("大端存储\n"); } return 0; } (二)用指针判断大小端 #include

C语言判断大小端

1 #include <stdio.h> 2 typedef unsigned char BYTE; 3 int main(int argc, char* argv[]) 4 { 5 unsigned int num,*p; 6 p = &num; 7 num = 0; 8 *(BYTE *)p = 0xff; 9 if(num == 0xff) 10 { 11 printf("little\n"); 12 } 13 else //num == 0xff000000

C语言学习笔记(三) 使用union检查系统大小端模式

问题:请写一个C函数,若处理器Big_endian的,则返回0:若是Little_endian的,则返回1. 简单复习下大小端的概念: 大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中. 小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中. 提示:C语言中的char占1个字节,而int占4字节,因此如果某个int变量被赋值为1,则大端模式内存布局(由低到高,下同)应该为0x00,0x00,0x00

C语言面试篇1:判断数据大小端存储

一.前言 本节,我们将学习C语言库中数据存储方式,并通过编写代码确定当前系统的数据存储方式. 二.简介 1.大端模式 大端模式是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中. 2.小端模式 小端模式是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中. 3.为什么会有大小端之分? 为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit.但是在C语言中除了8bit的char之外,还有

c语言 union及 大端小端

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

union关键字及大小端模式

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

C语言怎么简单测试为大小端模式

1.什么是大小端模式? 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放:这和我们的阅读习惯一致. 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低. 2.知道大小端有何用? 首先要介绍一下字节序列,所谓的字节序列就是大于或者等于两个字节类型的数据存放在