首页 > 其他分享 >union共用体以及如何判断大小端?

union共用体以及如何判断大小端?

时间:2024-04-29 15:44:22浏览次数:19  
标签:小端 判断 字节 union 模式 test 共用

目录

方法一(共用体):

在C语言当中,有一个和结构体非常像的语法叫共用体(Union)。

union myunion {
	int a;
	char b;
};
union myunion test;

在共用体中,所以成员共用一段内存,对某一个数据成员赋值,其他成员也就失效了。在上述例子中,a占4个字节,b占1个字节,所以test的占据内存大小取他们的最大值4个字节。

如图所示,a和b靠地址较小一边对齐,a和b共用一段内存。如果对a赋值,影响了4个字节内存,如果对b赋值,影响了1字节内存,所以不管是谁赋值,都会影响另外一个。刚好我们可以根据这个特点,去判断大小端。
image
低地址放低字节,高地址放高字节,是小端模式。反过来放,是大端模式。有些CPU公司用大端(譬如C51单片机);有些CPU用小端(譬如ARM)。(大部分是用小端模式,大端模式的不算多)。

如何判断大小端

union myunion test;
	test.a = 0x12345678;		
	if (test.b == 0x78)
		printf("小端模式");		
	else if (test.b == 0x12)
	 printf("大端模式");	

如果是小端模式,那么a的低字节0x78就应该放在低地址,所以此时用test.b读出来的刚好是0x78
image
如果是大端模式,那么a的高字节0x12就应该放在低地址,所以此时用test.b读出来的刚好是0x12.
image

二:方法二(

标签:小端,判断,字节,union,模式,test,共用
From: https://www.cnblogs.com/wxp55/p/18165817

相关文章

  • isAlnum判断字符是否为字母数字字符(字母和数字都属于字母数字字符)
    0.声明intisalnum(intch);1.用法isalnum是C++标准库中定义的函数,用于检查一个字符是否是字母或数字字符。该函数接受一个整数参数ch,表示要检查的字符。如果ch是一个字母字符(大写或小写字母)或一个数字字符(0-9),则该函数返回非零值(通常是1),否则返回0。2.用法实例#in......
  • 二的幂次方判断——使用位运算-来源于lowbit操作
     解法:位运算的使用这里需要就是了解位运算的使用了lowbit函数x&-x这种算法其实是利用了计算机的补码性质。计算机为了表示负数,将对应的正数二进制全部取反再加一。lowbit是为了获取一个数的二进制中最低位的1对应的值,比如lowbit(10(10))=10(2),因为10的二进制表达是1010。......
  • 顺序栈十进制转十六进制,还有键盘输入一个包括 '(' 和 ')' 的字符串string ,判断字符串
    设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。*@brief :十进制转十六进制*@param :@Segstackt*Manager:地址* @unsignedintData:转换的值*@re......
  • 一道关于顺序栈的笔试题:判断一个包含'('和')'的字符串是否有效
    若有一个包括'('和')'的字符串string,判断字符串是否有效。要求设计算法实现检查字符串是否有效,有效的字符串需满足以下条件:A.左括号必须用相同类型的右括号闭合。B.左括号必须以正确的顺序闭合。C.每个右括号都有一个对应的相同类型的左括号。思路图:参考代码:boolSeq......
  • 利用两个栈实现队列的入队出队以及判断队列是否为空
    boolenQueue(SeqStack_t*S1,SeqStack_t*S2,intx){DataType_ttemp=x;//判断S1是否满if(SeqStack_IsFull(S1)){//判断S2是空if(SeqStack_IsEmpty(S2))![image](uploading...){while(!SeqStack_IsEmpty......
  • openGauss UNION子句
    UNION子句UNION计算多个SELECT语句返回行集合的并集。UNION内部的SELECT语句必须拥有相同数量的列,列也必须拥有相似的数据类型。同时,每条SELECT语句中的列的顺序必须相同。语法格式UNION:结果中如果出现相同的值,仅保留一个。SELECTcolumn_name(s)FROMtable_name1UNIONSE......
  • 利用顺序栈判断字符串是否有效
    数据结构顺序表笔试题:通过键盘输入一个包括'('和')'的字符串string,判断字符串是否有效。要求设计算法实现检查字符串是否有效,有效的字符串需满足以下条件:A.左括号必须用相同类型的右括号闭合。B.左括号必须以正确的顺序闭合。C.每个右括号都有一个对应的相同类型的......
  • 用顺序栈判断输入的字符串是否有效 (笔试题)
    思想:1、先对Manager的Top(栈中有效数据的下标)备份,用循环对字符串进行遍历a.当前字符不为'('和‘)’则进行下一次循环b.当前字符为'('则将'('入栈,并将Manager中的Top(下标)加1c.当前字符为')'则判断当前Top是否与备份的数值相等,如不相等,则')'前面没有'('与之配对,既字符串无效,直......
  • 输入‘(’和‘)’判断字符串有效的函数算法
    ``//设置一个函数,通过输入键盘中的‘(’和‘)’判断字符串是否有效//顺序表中的元素数据类型是char类型typedefcharDataType_t;//创建顺序栈SequenceStack各项数据(栈底地址栈容量栈顶元素下标)的结构体typedefstructSequenceStack{DataType_t*Bottom;//记录栈......
  • 代码段——C#判断时间是否在某个范围
    目录1.使用DateTime.Compare()2.通过时间相减计算时间间隔,可以指定精确度1.使用DateTime.Compare()注意:两个比较的时间,一定与相同的时间精度,比如都精确到分钟,或都精确到日注意:这里我判断指定时间是否在时间范围的闭区间里///<summary>///判断指定的时间......