C语言编程中的8位、16位、32位整数的分解与合并方法是什么

这篇文章主要讲解了“C语言编程中的8位、16位、32位整数的分解与合并方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言编程中的8位、16位、32位整数的分解与合并方法是什么”吧!

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、虚拟空间、营销软件、网站建设、北票网站维护、网站推广。

练习在VC++6.0编程环境中进行,源程序:
#include <stdio.h>
#include "string.h"

int main(int argc, char argv[])
{    
unsigned int Data_Uint32=0x12345678;
unsigned short int Data_Uint16_1,Data_Uint16_2;
unsigned char Data_Uint8_1,Data_Uint8_2,Data_Uint8_3,Data_Uint8_4;
struct StructByte8{
unsigned char Byte01:1;
unsigned char Byte02:1;
unsigned char Byte03:1;
unsigned char Byte04:1;
unsigned char Byte05:1;
unsigned char Byte06:1;
unsigned char Byte07:1;
unsigned char Byte08:1;
} Test1;
unsigned char C1[]="A";
unsigned short int
p16=(unsigned short int *)(&Data_Uint32);//定义16位的指针将32位地址强制转为16位,高位丢弃取低位
unsigned short int Data_Uint16_2p,Data_Uint16_1p;

  printf("32位整数:0x%x\n",Data_Uint32);
  printf("-------------------通过指针运算-------------------\n");
  Data_Uint16_2p=*(unsigned short int *)p16;
  Data_Uint16_1p=*((unsigned short int *)p16+1);
  printf("转换后的16位整数:0x%x,0x%x\n",Data_Uint16_1p,Data_Uint16_2p);

  Data_Uint8_1= *(unsigned char *)p16;
  Data_Uint8_2= *((unsigned char *)p16+1);
  Data_Uint8_3= *((unsigned char *)p16+2);
  Data_Uint8_4= *((unsigned char *)p16+3);
  printf("转换后的8位整数:0x%x,0x%x,0x%x,0x%x\n",Data_Uint8_1,Data_Uint8_2,Data_Uint8_3,Data_Uint8_4);

  Data_Uint8_1=0;Data_Uint8_2=0;Data_Uint8_3=0;Data_Uint8_4=0;
  //直接根据指针取值
  //将32位的整数分解成两个16位的整数,再取低位的16位
  //强制转换,丢弃高位的16位
  //32位转16位
  Data_Uint16_1=(unsigned short int)(Data_Uint32>>16);
  Data_Uint16_2=(unsigned short int)Data_Uint32;

  //32位转8位
  Data_Uint8_1= (unsigned char)(Data_Uint32>>24);
  Data_Uint8_2= (unsigned char)(Data_Uint32>>16);
  Data_Uint8_3= (unsigned char)(Data_Uint32>>8);
  Data_Uint8_4= (unsigned char)Data_Uint32;

  printf("-------------------通过位运算-------------------\n");
  printf("转换后的16位整数:0x%x,0x%x\n",Data_Uint16_1,Data_Uint16_2);
  printf("转换后的8位整数:0x%x,0x%x,0x%x,0x%x\n",Data_Uint8_1,Data_Uint8_2,Data_Uint8_3,Data_Uint8_4);

  printf("-------------------通过结构运算-------------------\n");     
  printf("字符A,ASCII为01000001,结构转换后的内容\n");  
  memcpy(&Test1, C1, sizeof(Test1));  
  printf("Test1.Byte08=%d \n",Test1.Byte08);  
  printf("Test1.Byte07=%d \n",Test1.Byte07);  
  printf("Test1.Byte06=%d \n",Test1.Byte06);  
  printf("Test1.Byte05=%d \n",Test1.Byte05);  
  printf("Test1.Byte04=%d \n",Test1.Byte04);  
  printf("Test1.Byte03=%d \n",Test1.Byte03);  
  printf("Test1.Byte02=%d \n",Test1.Byte02);  
  printf("Test1.Byte01=%d \n",Test1.Byte01);  

  Data_Uint8_1=0x89;Data_Uint8_2=0xAB;Data_Uint8_3=0xCD;Data_Uint8_4=0xEF;
  printf("-------------------通过位运算合并-------------------\n");
  Data_Uint16_1 = (unsigned short int)(Data_Uint8_1 << 8) | (unsigned short int)(Data_Uint8_2);
  Data_Uint16_2 = (unsigned short int)(Data_Uint8_3 << 8) | (unsigned short int)(Data_Uint8_4);
  Data_Uint32=(unsigned int) (Data_Uint16_1 << 16) | (unsigned int)(Data_Uint16_2);
  printf("合并前的8位整数:0x%x,0x%x,0x%x,0x%x\n",Data_Uint8_1,Data_Uint8_2,Data_Uint8_3,Data_Uint8_4);
  printf("合并后的16位整数:0x%x,0x%x\n",Data_Uint16_1,Data_Uint16_2);
  printf("合并后的32位整数:0x%x\n",Data_Uint32);

return 0;

}
输出:
C语言编程中的8位、16位、32位整数的分解与合并方法是什么

在这里练习以后进入Keil uVision5编程,想写个通用的转换函数,后面想没有必要,难道8、16位、32位相互转换这么复杂吗?如果这样,写在Keil uVision5里面的程序会是多么复杂,以后自己看起来也会繁琐的。

接着写:

直接强制转换:

  printf("-------------------8位到32位转换-------------------\n");
  Data_Uint8_1=0x00;
  Data_Uint8_2=0x19;
  Data_Uint16_2=0x00;
  Data_Uint16_1 = (unsigned short int)(0x00 << 8) | (unsigned short int)(Data_Uint8_2);
  Data_Uint32=(unsigned int) (0x00 << 16) | (unsigned int)(Data_Uint16_1);
  printf("转换前的8位整数:0x%x,%d\n",Data_Uint8_2,sizeof(Data_Uint8_2));
  printf("8位到32位转换1======>转换后的32位整数:0x%x,数据长度:%d\n",Data_Uint32,sizeof(Data_Uint32));
  Data_Uint32=(unsigned int) (0x00 << 16) | (unsigned int)( (unsigned short int)(0x00 << 8) | (unsigned short int)(Data_Uint8_2));
  printf("8位到32位转换2======>转换后的32位整数:0x%x,数据长度:%d\n",Data_Uint32,sizeof(Data_Uint32));
  //Data_Uint32=(unsigned int) (0x00 << 24) | (unsigned int)(Data_Uint8_2);
  Data_Uint32= (unsigned int)(Data_Uint8_2);
  printf("8位到32位转换3======>转换后的32位整数:0x%x,数据长度:%d\n",Data_Uint32,sizeof(Data_Uint32));
  Data_Uint32=0x69;
  Data_Uint8_1= (unsigned char)(Data_Uint32);
  printf("32位整数:0x%x,数据长度:%d\n",Data_Uint32,sizeof(Data_Uint32));
  printf("32位到8位转换======>转换后的8位整数:0x%x,数据长度:%d\n",Data_Uint8_1,sizeof(Data_Uint8_1));

实际输出:

-------------------8位到32位转换-------------------
转换前的8位整数:0x19,1
8位到32位转换1======>转换后的32位整数:0x19,数据长度:4
8位到32位转换2======>转换后的32位整数:0x19,数据长度:4
8位到32位转换3======>转换后的32位整数:0x19,数据长度:4
32位整数:0x69,数据长度:4
32位到8位转换======>转换后的8位整数:0x69,数据长度:1

说明:8位强制转32位,前面系统自动加了24位的0;32位强制转8位,系统只截取了最后的8位。

感谢各位的阅读,以上就是“C语言编程中的8位、16位、32位整数的分解与合并方法是什么”的内容了,经过本文的学习后,相信大家对C语言编程中的8位、16位、32位整数的分解与合并方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!

当前名称:C语言编程中的8位、16位、32位整数的分解与合并方法是什么
文章网址:https://www.cdcxhl.com/article32/ghddpc.html

成都网站建设公司_创新互联,为您提供外贸建站网站建设网站制作网站收录网站设计公司网站设计

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都app开发公司