关于这个概念,是我从工作中学习的,虽然在读书的时候就应该要掌握,但是在开发中,这项技能尤其重要。我是做嵌入式开发的,在嵌入式开发过程中,如何对数据操作必然是不可缺少的问题,接下来,我们来看一个例子:

1.

#include <stdio.h>
int main(void)
{unsigned int  temp = 0x10 ;unsigned int  high = (temp - temp % 0x10) / 0x10 ;unsigned int  low = temp % 0x10 ;printf("high:%u    low:%u\n",high , low) ; return 0 ;
} 

这个例子就是将0x10这个无符号整型数进行高低位分离,结果就是high = 1 , low = 0 ;大家可以拿笔算一下,是不是这样一个结果。下次要是开发中要你将一个数的高地位分离出来,用这种最普通的算法便可以实现。

接下来,我们来看第二个例子:

2.

#include <stdio.h>
int main(void)
{unsigned int offset = 0x1234 ;unsigned int high = 0 ;unsigned int low = 0 ;high = ((offset >> 8 )& 0xff);low = (offset&0xff) ;printf("high = %p->%d   low = %p->%d\n",high , high ,low ,low);
}

C语言中的位操作在嵌入式开发中也是非常常见的,清位,置位,异或,左移,右移,逻辑取反,按位取反,这些概念希望想从事这方面开发的技术人员务必精通它,因为太常见了。

我们来分析一下这个例子,首先这道题其实就是将一个16进制的高低8位进行分离,offset = 0x1234 ,将这个数右移8位,然后与上0xff便取到了这个数的高8位12,将offset与上0xff便取到了这个数的低8位,这样就达到了分离高地位的目的,这种方法比较简单,不理解的,把它记住就行了,下次直接用。

接下来,我们来看第三个例子:

3.

#include <stdio.h>
int RecordBuffer[10];
int buffer_write(unsigned int *buffer , int size_to_write) ;
int main(void)
{unsigned int buffer[] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09 ,0x0a};buffer_write(buffer , 10);int i ;for(i = 0 ; i < 10 ; i++) printf("Recordbuffer[%d]:%p\n",i , RecordBuffer[i]);return 0 ;
}int buffer_write(unsigned int *buffer , int size_to_write)
{int *p = (int *)buffer ;int i ;for(i = 0 ; i < size_to_write ;i += 2){RecordBuffer[i/2] = *(p+i)|(*(p+i+1) << 8) ;}
}
<img src="https://img-blog.csdnimg.cn/2022010611460117429.png" alt="" />

这个例子就是将数组传进来的1,2,3,4,5,6,7,8,9,10每两个合并成一个字节,合并出来的结果就是0201,0403,0605,0807,0A09,这样的算法其实非常节省空间,相当于把10个数变成5个数然后存到数组里面去。这样的方法当时我也是第一次知道,就是在写SPI_FLASH写操作时,由于汇编代码中的数据是高低位存储的,于是我就想到了这个方法,将数据写到了汇编函数里去。这种方法有点类似上面的一种,只不过多了个数组,可以慢慢的理解一下,或者找Debug调试一下出结果就知道是为什么了。

C语言如何分离一个数的高低位,如何将2个字节变成一个字节相关推荐

  1. 洛谷——P1100 高低位交换

    P1100 高低位交换 题目描述 给出一个小于2^32的正整数.这个数可以用一个32位的二进制数表示(不足32位用0补足).我们称这个二进制数的前16位为"高位",后16位为&qu ...

  2. 将16bit的数据高低位对调的方式

    文章目录 1. 大小端模式 2. 数据格式 方式1:htons函数 方法2:移位计算 1. 大小端模式 大端模式: 是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储 ...

  3. CRC-16/MODBUS的高低位之说

      MODBUS的CRC校验过程为:   1.预置1个16位的寄存器为0xFFFF(即全为1),称此寄存器为CRC寄存器:   2.把第一个8位二进制数据(既通讯信息帧的第一个字节)与CRC寄存器的低 ...

  4. C语言试题九十二之输入数据有多行,第一行是一个整数n,表示测试用例的个数,后面跟着n行 ,每行包括一个由字母和数字组成的字符串

    ​ 1.题目 输入 输入数据有多行,第一行是一个整数n,表示测试用例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串 输出 对于妈给测试用例,输出该字符串中数值的个数,每个输出占一行 样式输 ...

  5. c语言实验题——字符串排序,C语言中实现“三个数由小到大排序”的多种方法浅析...

    本文通过一个简单示例"三个数由小到大排序",将C语言中许多知识点融会贯通起来,这多种方法的实现可以将函数.宏.指针之间的区别和本质清晰的展示给读者,使本来很复杂难以理解的概念变得通 ...

  6. 【C语言快速入门】三万字+高质量教学

    写在前面: 简单介绍一下本篇文章的主要目的: 是让新手玩家快速认识并了解C语言基础内容和语法结构,并没有深入去探究,让大家对C语言有个大概且全面的认识. 相信我,这篇文章虽然很长,但不会让你从入门到入 ...

  7. C语言重复加一个数的所有位数字的算法(附完整源码)

    C语言重复加一个数的所有位数字的算法 问题举例 C语言重复加一个数的所有位数字的算法完整源码(定义,实现,main函数测试) 问题举例 例如给定num = 38,过程类似于:3 + 8 = 11,1 ...

  8. 【C语言】有3个数a,b,c,要求按大小顺序把它们输出(基础法)

    [C语言]有3个数a,b,c,要求按大小顺序把它们输出(基础法) 一.实现原理 二.整体源码 三.实现结果 一.实现原理 1.首先定义3个随机数变量a.b.c和1个中间变量t 2.利用if条件句来比较 ...

  9. c语言指针输出两个数的最大值和最小值,并求和,有些不清楚这样写为什么不行。

    网上看到一个帖子,居然自己找不出原因. c语言指针输出两个数的最大值和最小值,并求和,有些不清楚这样写为什么不行. #include<stdio.h> int main() {     i ...

  10. 五个数字从小到大排序java,五个数冒泡排序 用c语言数组定义5个数使用冒泡排序 从小到大...

    任意输入5个整数,利用冒泡排序法排序(从大到小) #include main() { int a[6]; /*定义一个整型数组.*/ int i,j,temp; /*定义循环变量和中间变量. 用jav ...

最新文章

  1. LaTeX 中表格的用法总结(四)——三线表和复杂的表格
  2. .NET 中使用 Mutex 进行跨越进程边界的同步 - walterlv
  3. Python学习笔记:循环语句
  4. Gradle属性(四)
  5. java中的asList_Java中的Arrays.asList()方法
  6. 上周五,小编参加了一场高大上的“9”会
  7. atlas安装需要kafka吗_Atlas 2.1.0 实践(2)—— 安装Atlas
  8. C++11多线程实现银行存取款案例
  9. 分析微信小程序生成二维码接口报错41030: invalid page hint
  10. Devexpress WPF教程
  11. 在64位WIN7系统中修改驱动的sys文件,主要在sys文件中修改一下提供商等信息。
  12. com.android.stfwd,[原创]360freewifi逆向分析
  13. 冰川时代5:星际碰撞Ice Age: Collision Course迅雷下载
  14. Levels - 虚幻引擎场景制作
  15. 小象学院python网课值得吗-小象学院的机器学习集训营课程怎么样?
  16. Chrome 浏览器如何截取整个页面
  17. 【华为OD机试 2023】二元组个数(C++ 100%)
  18. win10无法装载iso文件_iso镜像安装失败无法安装Windows10怎么办?
  19. 解决电脑com口被占用与修改COM号问题
  20. 对AVL树和红黑树的个人理解

热门文章

  1. 斯皮尔曼相关系数计算的python代码
  2. LWM2M开源协议栈——wakaama源代码分析
  3. 小米手机怎么复制加密门禁卡_使用小米手机复制加密门禁卡的方法
  4. SPSS22 高级市场分析 统计分析【原创】
  5. iOS逆向(八)逆向工具 otool 介绍
  6. IDEA格式化XML中的SQL语句
  7. [iOS_Dev] 官方Mac OS X.dmg 下载,dmg 转 iso,Mac 镜像。
  8. springboot test
  9. 猫狗识别基于kaggle数据集
  10. win7升级Internet Explorer 11 先决条件更新