最近在过年,并且在推进导师的项目和写论文,很久没有更新了,先随便写点东西。

在大四的时候曾经遇到过,在进行串口通讯时,只能通过8位数组,8位8位的传输数据,因此有时需要读取或存储更高位的数据例如16位或32位时,就会存在数据的拆分和组合的问题。
当时的解决方法是通过定义共用体,或者对数据进行移位和取余来实现数据的拆分和组合。
现在在做项目时又遇到了以上问题,经过这段时间的学习,对C语言的理解更深刻,因此发现采用指针的方法实现起来更为便捷。
思路就是,对于数组指针,在需要进行高位的读取和拆分时,仅在需要读取和拆分的语句中,对数组指针进行指针类型的强制转换,将原来的8位数组指针转化为16位或32位指针,从而实现一次对8位的数组写入16位或读取16位。

例如

u8 a[16];   //定义一个8位数组(*(u16 *)(a+1))=0x0F1F;    //a[1]=0x0F a[2]=0x1F

4.24日补充:但是在上面这里需要注意的是,如果直接把一个指针中的数作为u16的值赋给其他的值,需要十分注意是否存在大小端存储方面的问题(在大多数嵌入式单片机上是有大小端存储的问题的),这里点名大小端转换的问题,是因为我在使用的时候是用于上下位机通讯的,因此需要考虑到上位机和下位机之间的大小端是否不一致等问题。

11.14日补充:感谢网友对我的错误的指出,这里确实少写了一个*(取地址符)

随笔:在C语言中如何快速的将16位数据拆开存到8位数组中相关推荐

  1. VC++中从txt文本中读取数据并且存到二维数组中

    这几天因为在做作业,所以不仅会想到这一类有关的问题.现在我需要实现的是讲txt文件的数据读取出来并且存储到一个二维数组中.,首先为了对待什么样的矩阵我们都可以读取,我们就要设置一个动态的矩阵,这样当我 ...

  2. Excel中如何快速汇总带单位的数据

    Excel中如何快速汇总带单位的数据 目录 Excel中如何快速汇总带单位的数据 1.例如快速求下表总销售量 2.张华总销售量手动输入"A=23+300+123+45",其他人员总 ...

  3. C语言试题二十三之编写一个函数void function(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中

    1. 题目 请编写一个函数void function(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中.二 ...

  4. 汇编语言:编写code段中的代码,用push指令将a段中的前8个字型数据,逆序存储b段中

    题目介绍 程序如下,编写code段中的代码,用push指令将a段中的前8个字型数据,逆序存储b段中. assume cs:code,ds:a,ss:ba segmentdw 1,2,3,4,5,6,7 ...

  5. oracle数据库中批量把一张表里面的数据插入到不同的表中的方法

    oracle数据库中批量把一张表里面的数据插入到不同的表中的方法(insert first into | insert all into) 准备环境 1.oracle数据库自带的scott下的用户表 ...

  6. 在“https://money.cnn.com/data/markets/nasdaq/”抓取纳斯达克成分股数据并将数据表存到一个Excel表格中。

    在"https://money.cnn.com/data/markets/nasdaq/"抓取纳斯达克成分股数据并将数据表存到一个Excel表格中. import requests ...

  7. 将1-1000中所有12的倍数存到一个一维数组中,输出该数组和数的个数

    将1-1000中所有12的倍数存到一个一维数组中,输出该数组和数的个数 #include<stdio.h>void main(){int i,j=0,a[100];for(i=1;i< ...

  8. matlab的且数组专职,如何将excel中数据导入matlab并存入数组中/matlab导入数据并绘图...

    怎样将matlab中的数据导入到excel中 1.首先打开matlab,新建窗口. 2.接着在matlab中生成,并且到excel文件中,具体代码如下图所示. 3.下面来看一下生成的myExample ...

  9. 区间素数 由N(N<=10000)个整数组成的数组,其中连续K(K<=200)个元素构成一个区间,称为K区间。一个K区间中所有素数的和记为Sk,请计算整个数组中,所有K区间中的最大Sk值,并输出。

    由N(N<=10000)个整数组成的数组,其中连续K(K<=200)个元素构成一个区间,称为K区间.一个K区间中所有素数的和记为Sk,请计算整个数组中,所有K区间中的最大Sk值,并输出. ...

最新文章

  1. 若显示器接口电路中的刷新存储器容量为1MB,当采用800*600的分辨率模式时,每个像素最多可以有多少()种颜色
  2. mySQL Slow Query Log Rotation(慢查询日志轮循设置)
  3. Android自定义控件系列
  4. 美国国家航空航天局宣布发现地球2.0
  5. Angular里的购物车页面实现
  6. python按键_【python】python控制鼠标和键盘
  7. react 执行入口_如何使用React执行CRUD操作
  8. GitHub#algorithm#:《剑指offer》 的50道面试题
  9. SQL Server基础之索引
  10. Ubuntu 14.04 安装Octave
  11. ZZULIOJ1016
  12. 穿墙贪吃蛇(C语言)
  13. 或非门sr锁存器_d锁存器与sr锁存器的区别
  14. Clonezilla 再生龙制作系统U盘还原系统
  15. ORAN专题系列-1:什么是开放无线接入网O-RAN
  16. 我为大家整理了一波 Java 超全面试题
  17. android录音波浪动画_Android实现波浪效果 - WaveView
  18. BT.656、PAL、NTSC标准并行数据结构
  19. 短线王的盯盘宝怎么样_自用多年的很牛的多空指标、无敌短线王
  20. 16.引言篇——自定义过滤器及标签

热门文章

  1. bwlabel实现(递归、一步法、两步法)
  2. Java高级阶段技术总结
  3. Linux 天文软件YAO保存图片(PSF wavefront等)
  4. portlet java_Portlet和servlet的区别
  5. 续之前微信小程序的部分代码
  6. Window10通过cmd终端实时查看log日志文件
  7. php绕过d盾,巧用匿名函数绕过D盾
  8. 一招删除电脑上的无用文件和流氓软件,让电脑变得干净
  9. 高清视频转换器,任意格式互转方法!
  10. 人事面试题目之——人事65问