如何利用c中的指针实现两个8bit的数合并为16bit
对于从事单片机开发,进行单片机c语言开发的人来说,在对外部信息采集回来的数据进行处理,经常会用到,将采集到的第一个字节作为高8位,采集到的第二个字节作为低8位,从而构成1个16bit的数,得到一次完整的数据。那么如何来实现呢。
方法1:
比较普遍的做法是通过移位思想,
eg:
void get_data(u16 *p);
void main()
{
u16 data;
get_data(&data);
}
void get_data(u16 *p)
{
u8 buf[2];
u16 temp;
buf[0]=s_read();
buf[1]=s_read();
temp=buf[0]<<8+buf[1];
*p=temp;
}
【注:上面的数据类型定义是采用STM32中的数据类型来定义的,不是标准C,上面程序这样写主要是与下面的形成对比】
方法2:通过指针来实现
指针变量作为函数参数,这样在函数中修改实参所对应的地址中存放的数,【通过指针修改实参指针变量所指的值】
eg.
void get_data(u8 *p);
void main()
{
u16 data;
get_data((u8)&data);
}
void get_data(u8 *p)
{
*p=s_read();
*(p+1)=s_read();
}
这样我们分析一下,由于u16占用两个字节,u8占用1字节,这样形参p中存放的地址和实参&data是相同的,
我们通过对p地址,p+1地址中赋值,从而对实参&data地址进行了赋值。
这就是通过指针实现题目的要求。
但是有个问题,方法二和方法一得到的结果一样吗?
这里就有了字节序的概念,即低地址中存放高位,还是地址中存放高位。
即大端模式和小端模式。可以参考这篇文章 大端模式和小端模式参考
PC机是小端模式,所以上述两种方法得到的结果不一致。
单片机:51单片机是大端模式,上诉结果一致,
stm32是小端模式,上述两种方法结果不一致。
所以需要根据具体的处理器是大端模式,还是小端模式来进行处理。
如何利用c中的指针实现两个8bit的数合并为16bit的更多相关文章
- 解读 C 语言中的指针
我想对很多学习C语言的新手来说,指针无疑是一个难点.但是,我觉得指针也是C语言特别重要的一个特性.也许,你在除了C和C++以外的编程语言中,很少看到指针.而C++中,也多用引用,而非指针.指针,作为一 ...
- c中的指针
一. 指针前奏 1. 指针的重要性 指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很好,那你干脆说没学过C语言. 2. 小需求 l void change(int n)函数 ...
- C语言中的指针
请先看C++中的指针概述,这里只是扩充 数组指针 其实这里主要说的就是c++中的指针运算 /* 数组元素指针: 一个变量有地址,一个数组包含若干个元素,每个数组元素都有相应的地址, 指针变量可以指向数 ...
- 新手学习之浅析一下c/c++中的指针
一.我们先来回忆一下指针的概念吧,方便下面的介绍 指针是存放地址值的变量或者常量.例如:int a=1;&a就表示指针常量(“&”表示取地址运算符,也即引用).int *b,b表示的是 ...
- 《挑战30天C++入门极限》C/C++中字符指针数组及指向指针的指针的含义
C/C++中字符指针数组及指向指针的指针的含义 就指向指针的指针,很早以前在说指针的时候说过,但后来发现很多人还是比较难以理解,这一次我们再次仔细说一说指向指针的指针. 先看下面的代码,注意看 ...
- 如何利用excel中的数据源制作数据地图
关于这个问题,制作数据地图的方法已不新奇,总体来说有这么几类方案: 一类方案:直接在excel里制作 优势:个人小数据量应用较为方便简单 缺点:需要熟悉VBA,且更强大的功能对VBA水平要求较高 1. ...
- 关于Vector中的元素中含有指针成员的情况
对于容器,当容器的各个元素为类类型,且该类类型中含有指针成员时: 如果类类型的析构函数中包含了对指针变量指向内存的释放操作,则在利用clear()函数删除容器所有元素时,会自动调用类的析构函数,自动实 ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)
MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...
- 转: 浅谈C/C++中的指针和数组(二)
转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组 ...
随机推荐
- require.js使用步骤
以superagent为例 1.设置lib目录 requirejs.config({ baseUrl: 'libs' }); 2. 使用SuperAgent require(['superagent' ...
- MAMP显示文件列表
背景 MAMP是Mac下的一个PHP+Nginx+MySQL的集成环境,支持多站点,不同版本PHP. 今天有人请教MAMP如何显示文件列表的问题,这里记录一下. 知识补充 一个网站为了安全考虑,默认是 ...
- Android应用打破65K方法数限制
近日,Android Developers在Google+上宣布了新的Multidex支持库,为方法总数超过65K的Android应用提供了官方支持.如果你是一名幸运的Android应用开发者,正在开 ...
- 插件开发之360 DroidPlugin源码分析(三)Binder代理
转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52138483 Hook机制中Binder代理类关系图 Hook机制中Binder代理时 ...
- MonoBehaviour介绍(Unity3D开发之一)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=486 猴子自学Unity已经一段 ...
- C++编译器对属性和方法的处理机制
C++中的class从面向对象理论出发,将变量(属性)和函数(方法)集中定义在一起,用于描述现实世界中的类.从计算机的角度,程序依然由数据段和代码段构成. C++编译器如何完成面向对象理论到计算机程序 ...
- smack4中文文档
smack4中文文档 基于samck官方最新文档翻译而成,适用于最新的Smack4.x 简介 6月毕业后来到帝都上班,找了一份Android开发的工作,公司开发的APP需要使用XMPP和Smack进行 ...
- Java进阶(六)Java反射机制可恶问题NoSuchFieldException
作为一种重要特性,Java反射机制在很多地方会用到.在此做一小结,供朋友们参考. 首先从一个问题开始着手. 可恶的问题又来了,NoSuchFieldException,如下图所示: 完全不知道这个qu ...
- 分布式集群Session共享 简单多tomcat8+redis的session共享实现
; i++) { str = str + session.getAttribute("name" + i) + "<br>"; } response ...
- 2015 Objective-C 三大新特性
Overview 自 WWDC 2015 推出和开源 Swift 2.0 后,大家对 Swift 的热情又一次高涨起来,在羡慕创业公司的朋友们大谈 Swift 新特性的同时,也有很多像我一样工作上依然 ...