一.对于uint32_t,uint16_t和uint8_t之间的相互转化,以及uint16_t的高低位互换,bit->int转换等

2023-05-16

一.对于uint32_t,uint16_t和uint8_t之间的相互转化,以及uint16_t的高低位互换,bit->int转换等

一.说明:

		左移:从二进制的角度看现象,就是左移几位就在右边添几个0。
		从逻辑上来讲左移n位就是乘以2的n次方了。
		
		右移:从二进制角度看,则是在左边填0,右边去除移动的位数的位 。
		(如遇到时1>>1, 便是0.);
		(注意:如果操作数是一个正数,那么左边的空缺位使用0补,
					如果操作数是一个负数,那么左边的空缺位使用1补)
		从逻辑上来讲右移就是除以2的n次方;

二.说明:

		将某位置0     a&=~(1<<x);
		将某位置1	 a|=(1<<x);
		取反某位       a^=(1<<x)	
	向某地址写入 	 *(*int ) a=0x12302312;	
#include <stdio.h>
#define u8 short int //2字节 8位
#define u16 long int //4字节 16位
#define u32 long long //8字节 32位

int main()
{//1. 从u8 -->>>u16的转化
 
	u8 a[2] = { 0xcd, 0xe2 };
	u16 b;
//分析:
	b=a[0]; //得到高位
	b=b<<8;//向左移8位。结果:0xcd00
	b=b|a[1];//或上a[1]=0xe2;  即0xcde2
//打印结果:a[1]=0xe2   a[0]0xcd
//        b=0xcde2

//   2. 从u16 -->>>u8的转化
	u8 a[2] = { 0 };
	u16 b = 0xc32d;
	//分析:
	a[1] = b >> 8;//b向右移8位,0x3c;
	a[0] = b & 0xff;//b与上oxff,得到0x2d
//打印结果:a[1]=0xc3  a[0]= 0x2d
//         b=0xc32d

// 3.调换高低位的位置 需要先将u16--->>u8 ,调换后,u8--->16
	u8 a[2] = { 0xab, 0xcd };
	u16 b;
	b= a[0] | a[1] << 8;//a[1]左移8位0xcd00,再或上a[0]0x00ab(为方便理解)这样看;
//结果:
    //a[1]=0xcd   a[0]=0xab
   //b=0xcdab

// 4. 从u32 -->>>u8的转化
	int i = 4;        
	u32 a=0x1234abcd;
	u8 b[4];
	b[0] = a >> 24;
	b[1] = (a >> 16)&0xff;
	b[2] =( a >> 8)&0xff;
	b[3] = a &0xff ;
	while (i--)
	{
		printf("0x%02x\n", b[i]);	
	}

//5. 从u8 -->>>u32的转化
int i = 4;        //8-->32
	u32 a;
	u8 b[4] = {0xcf,0xb3,0x43,0xbb};
	//此顺序不能改
	a = (long long)b[3] << 32;//高位
	a = b[0] << 24|b[3];//最低位
	a =a|(( b[1]&0x00ff)<<16);//低位
	a = a | ((b[2] & 0x0000ff) <<8);//次高位
	printf("0x%02x\n", a);


// 6.从u32 -->>>u16的转化
int i = 2;   
	u32 a = 0x1234abcd;
	u16 b[2];
	b[0] =( a >>16);
	b[1] = a &0xffff;
	while (i--)
	{
		printf("0x%02x\n", b[i]);
	}

//7. 从u16 -->>>u32的转化
int i = 2;   
	u32 a ;
	u16 b[2] = {0xa1cb,0x2bea};
	a=b[0]<<16;
	a = b[1] |( b[0]<<16);
    printf("0x%02x\n", a);

	getchar();
}

//8.int --->>bit(二进制)的转化
int int2_bit(int a)
{
	int i,bit,size=sizeof(a)*8;
	for(i=0;i<size;i++)
	{
		bit=a&(1<<(size-i-1));
		if(bit==1)
			pirntf("1");
		else
			printf("0");
			if(i%4==3)
			printf(" ");
	}
}
//9.bit-->int的转化

int power(int x)//x的指数幂
{
	int i=1,t=2;
	if(x ==0)
		t=1;
	for(;i<x;i++)
	{
		t=2*t;
	}
	return t;
}

int bit_int(char *x)
{	int i=0,n=7,tmp,sum;
	for(;i<8;i++,n--)
	{
		tmp=x[i]*pwer(n);
		sum+=tmp;
	}
	return sum;
}


//记录一个整数的二进制有多少个1
int ch_sum(int x)
{	
	int tmp,is=0;
	for(int i=0;i<sizeof(x)*8;i++)
	{	
		 tmp=1<<i;
		 if(x&tmp)
		 {
			is++;	
	     }		
	}
	return is;
}


//取补码
int8_t otcp( uint8_t a)
{
	uint8_t b=~a,t=1<<7;
	if(a<0)
	{
	   b|=t;	
	 }
	return b;
}
//将u8转成16进制类行改
	u8 a[2] = { 0x6, 0xc };
	u16 b;
//分析:
	b=a[0]; //得到高位
	b=b<<8;//向左移8位。结果:0x600
	b=b|(a[1]<<4);//左移4 ,得到到0xc60
	b=b>>4;//去除0 得到到0xc6
	printf("0x%0x ",b);

//剔除空格数据间的空格符
u8 d_k(u8 *databuf)
{			int of=0;
			for(int i=0;i<sizeof(datebuf);i++)
			{
				char c=databuf[i];
				if(c==' ')
				{
					++of;
				}
				else
				{
					rxbuf[i-of]=c;
				}	 
			}
	return rxbuf;
}

//ascii码转16进制
	char c_buf='a';
	int b='a'-'0' ;
	printf("0x%0x",b);//hex 输出
	printf("\n%d",b);//十进制 输出
	printf("\n%d",c_buf);//字符 以十进制 输出











本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一.对于uint32_t,uint16_t和uint8_t之间的相互转化,以及uint16_t的高低位互换,bit->int转换等 的相关文章

  • 有没有办法通过联合访问各个位?

    我正在写一个C程序 我想要一个可以作为字符访问的变量 但我也可以访问其特定位 我想我可以使用这样的工会 typedef union unsigned char status bit bits 8 DeviceStatus 但编译器不喜欢这样
  • uint32_t 与 int 作为日常编程的约定

    什么时候应该使用 stdint h 中的数据类型 总是使用它们作为惯例是正确的吗 像 int 和 Short 这样的非特定大小类型的设计目的是什么 什么时候应该使用 stdint h 中的数据类型 当编程任务指定整数宽度时 特别是为了适应某
  • 删除整数中的重复数字[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在技术回合中遇到过这个程序 他们给了我这个程序来删除给定整数中的重复数字不使用数组或字符串 Example int i 12313425
  • int 和 NSInteger 有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 何时使用 NSInteger 与 int https stackoverflow com questions 4445173 when to use nsinteger vs int 为什么会有 NS
  • 将 std::string 转换为整数

    我正在尝试转换std string存储在一个std vector为一个整数并将其作为参数传递给函数 这是我的代码的简化版本 vector
  • 目标 c:检查是否是整数/整数/数字

    在 Objective C 中 我如何检查字符串 NSNumber 是整数还是 int 如果您想确定是否NSString是否有数值 尝试使用NSNumberFormatter BOOL stringIsNumeric NSString st
  • 高效的按位运算,用于计数位或查找最右|最左的位

    给定一个 unsigned int 我必须执行以下操作 计算设置为 1 的位数 找到最左边1位的索引 找到最右边1位的索引 操作不应依赖于体系结构 我已经使用按位移位完成了此操作 但我必须迭代几乎所有位 es 32 例如 计算 1 unsi
  • 如何转换 int 以返回字符串,这就是我们所说的 int

    我遇到过这个面试问题 面试官要求编写一个函数 该函数将接受一个整数 例如 123 并返回一个字符串 该字符串就是人们所说的整数 在上面的情况下 输出应该是 一百二十三 我不知道如何解决这些问题 任何人都可以帮助解决这个问题吗 伪代码会很有帮
  • 检查 Python 列表中的项目是否为 int/number

    我有一个 Python 脚本 它读取 csv 文件并将每个值存储到列表列表中 list x y 我对此没有任何问题 list i 0 for row in reader list append list i append row 0 i 1
  • 整数比较值的输出错误

    我有以下代码 public static void doIntCompareProcess int a 100 int b 100 Integer c 200 Integer d 200 int f 20000 int e 20000 Sy
  • C 如何计算没有浮点精度的百分比(千)

    如何将 2 个 int 值的百分比计算为表示百分比的 int 值 更精确的是千分之一 背景 目的 使用没有 FPU 的处理器 浮点计算所需的时间要长 100 倍 int x 25 int y 75 int resultPercentage
  • C++:通过隐式构造函数初始化 int 变量

    我正在学习 C 我对 int 变量的初始化有点困惑 此代码 包括注释 是 Nawaz 在本主题中的答案的复制 粘贴为什么 C 需要用户提供的默认构造函数来默认构造 const 对象 https stackoverflow com quest
  • 将 int(32 位)转换为 char(8 位)

    我有这些定义 int data uartBaseAddress UART DATA REGISTER 4 data coming from UART RX port char message 20 array of 20 chars 现在当
  • 使用 int 值初始化向量

    我想用这个 ASCII 代码初始化这个 char 向量 vector
  • 尝试在 getline 中使用 int

    cout lt lt How many questions are there going to be on this exam lt lt endl cout lt lt gt gt getline cin totalquestions
  • 如何防止 java.lang.NumberFormatException: 对于输入字符串:“N/A”?

    在运行我的代码时 我得到了NumberFormatException java lang NumberFormatException For input string N A at java lang NumberFormatExcepti
  • Int32 和 UInt32 有什么区别?

    有什么区别Int32 and UInt32 如果它们与容量范围能力相同 问题是出于什么原因UInt32被创造了 我应该什么时候使用UInt32代替Int32 UInt32 不允许负数 从MSDN http msdn microsoft co
  • 什么是低位和高位?

    谁能告诉我什么是低位和高位 如何识别高位和低位 下面是二进制形式 如何0110里面有更高位吗 0110 0111 1100 1010 1100 0111 1001 1011 就像十进制一样 二进制中较高位通常写在左侧 所以如果你看到0111
  • Java中的整数除法[重复]

    这个问题在这里已经有答案了 这感觉像是一个愚蠢的问题 但我在 Java 文档中找不到答案 如果我声明两个 int 然后将它们相除 到底发生了什么 他们是否转换为floats doubles首先 划分 然后投射回integer 或者除法是作为
  • Python 中的字符串、整数和运算符

    如何在运算中使用算术运算符 由用户作为字符串输入 我可以打印操作本身 但我想打印解决方案 这是我的笨拙尝试 Initialise variables x 2 y 3 Prompt the user for an arithmetic ope

随机推荐

  • ROS Topic (话题通信总结)

    拿到一个功能包 xff0c 先运行一下 xff08 以turtlesim为例子 xff09 xff1a rusrun turtlesim turtlesim node 然后使用 rqt graph 和rostopic list 大致了解有哪
  • vector函数用法

    一维 基本用法 xff1a 1 头文件 include lt vector gt 2 创建vector对象 xff0c vector lt int gt vec 3 尾部插入数字 xff1a vec push back a 4 使用下标访问
  • Jetson nano串口的使用——UART

    UART串口使用两条杜邦线就可以实现数据发送和接收 xff0c 可以很方便的与其他扩展进行数据连接 xff0c 比如微雪的L76X GPS HAT就可以直接连接40Pin的GPIO接口通过UART串口进行数据传递 接下来具体说明Jetson
  • Python中[-1]、[:-1]、[::-1]、[n::-1]、[:,:,0]、[…,0]、[…,::-1] 的理解

    在python中会出现 1 1 1 n 1 0 0 1 xff0c 他们分别是什么意思呢 xff0c 这里就来详尽的说一下 xff1a 下面的a 61 1 2 3 4 5 1 xff1a 列表最后一项 1 xff1a 从第一项到最后一项 原
  • 贴片电阻字码阻值对照表

  • 使用sphinx生成python项目文档

    1 pip install sphinx 2 sphinx quickstart 3 修改 conf py import os import sys sys path insert 0 os path abspath 39 39 确保mod
  • 免费商用字体有哪些

    免费商用字体有哪些 一 思源字体 xff0c 可以免费商用的有 思源黑体 xff0c 思源宋体 xff0c 思源柔黑体 二 方正字体 xff0c 方正类字体可以免费商用的有 xff1a 方正仿宋 xff08 简 xff0c 繁 xff09
  • Qt:16进制字符串数据转整数数值函数

    span class token comment 16进制字符串数据转整数数值 span span class token keyword int span Setting span class token operator span sp
  • ESP-12F开发环境

    ESP 12F可以使用arduino IDE快速开发 1 首先安装arduino IDE xff1a 搜索直接下载即可 2 在文件 gt 首选项 gt 附加开发板管理器网址中添加ESP8266开发板 xff1a 网址 xff1a http
  • 第1章 电子设计与制作基础

    1 电子系统的分类 模拟电子系统数字电子系统模拟 数字混合系统微处理器 xff08 单片机 嵌入式 xff09 电子系统 2 电子系统的定义 通常 xff0c 将由电子元器件或部件组成的能够产生 传输 采集或处理电信号及信息的客观实体称为电
  • python requests timeout参数

    首先发一下牢骚 xff1a 不管是抄袭还是转载 xff0c 有点新东西行不行 xff0c 一味的转载有什么用呢 xff1f 东西还以那点东西 xff0c 让想解决问题的人查看一些一摸一样的文章 xff0c 只会浪费查询者的时间 况且 xff
  • c++配置http/post请求接收json数据

    照着教程编译操作都没问题 首先是配置curl库 给一个别人的编译链接curl库 vs2017 xff1a 亲测可用 c 43 43 编译curl库 测试代码 xff1a span class token macro property spa
  • c++ 编译过程

    c 43 43 编译过程引入 常见 xff1a 用gcc g 43 43 指令生成可执行文件 xff0c 对于大点的项目 xff0c 则是 xff1a configure span class token function make spa
  • c和c++有什么不同呢???

    区别联系 其实说起C和C 43 43 的区别 xff0c 我相信很多人其实立马就能脱口而出 xff1a C是面向过程编程的语言 xff0c 而C 43 43 是面向对象的编程语言 C是一个结构化语言 xff0c 重点在于算法和数据结构 xf
  • 关于stm32f4上对(28byj-48)步进电机的应用控制和解读。

    1 关于stm32f4上对 xff08 28byj 48 xff09 步进电机的应用控制和解读 xff08 1 ULN2003驱动模块电路 步进电机不能直接和单片机连接 xff0c 需要对应驱动模块提供电机所需的电流 电路图分析 xff1a
  • 对于stm32仿真器下载程序事常见的问题(No Target Connected 错误和SWD/JTAG Communication Failure错误)解决方案。

    一 对于stm32仿真器下载程序事常见的问题 xff08 No Target Connected 错误和SWD JTAG Communication Failure错误 xff09 解决方案 xff08 1 xff09 出现这种问题的本质是
  • 在CSDN写博客12年了,提几点建议

    从2020开始到现在一年多没有更新了 xff0c 一方面是在工作中burn out了 xff0c 其次是站在程序员的视角 xff0c CSDN的变化我认为一些地方有待改进 先说首页 头条 热点 内容有待提高 之前的首页内容有很多 纯技术的内
  • 一.stm32使用hal库串口接收发送测试

    一 hal库串口接收发送测试 1 串口的模式有3种 xff0c 一是查询模式 xff0c 二是中断模式 xff0c 三是DMA模式 HAL UART Transmit 串口轮询模式发送 xff0c 使用超时管理机制 HAL UART Rec
  • 一.在HAL库中使用串口(dma)模式接收发送测试

    1 串口DMA的配置 xff1a DMA作为一种数据传输的工具 xff0c 主要在串口中起到传输数据的作用 配置dma时需要将接收设置成循环模式 xff0c 发送为正常模式 在串口中断中处理数据 2 代码补充 在usart span cla
  • 一.对于uint32_t,uint16_t和uint8_t之间的相互转化,以及uint16_t的高低位互换,bit->int转换等

    一 对于uint32 t xff0c uint16 t和uint8 t之间的相互转化 xff0c 以及uint16 t的高低位互换 xff0c bit gt int转换等 一 说明 xff1a 左移 xff1a 从二进制的角度看现象 xff