![嵌入式开发中字节高低位转换如何实现_第1页](http://file4.renrendoc.com/view/4e8e7f384a7b08c37fa0a85e059216bb/4e8e7f384a7b08c37fa0a85e059216bb1.gif)
![嵌入式开发中字节高低位转换如何实现_第2页](http://file4.renrendoc.com/view/4e8e7f384a7b08c37fa0a85e059216bb/4e8e7f384a7b08c37fa0a85e059216bb2.gif)
![嵌入式开发中字节高低位转换如何实现_第3页](http://file4.renrendoc.com/view/4e8e7f384a7b08c37fa0a85e059216bb/4e8e7f384a7b08c37fa0a85e059216bb3.gif)
![嵌入式开发中字节高低位转换如何实现_第4页](http://file4.renrendoc.com/view/4e8e7f384a7b08c37fa0a85e059216bb/4e8e7f384a7b08c37fa0a85e059216bb4.gif)
![嵌入式开发中字节高低位转换如何实现_第5页](http://file4.renrendoc.com/view/4e8e7f384a7b08c37fa0a85e059216bb/4e8e7f384a7b08c37fa0a85e059216bb5.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第页嵌入式开发中字节高低位转换如何实现蝶式交换。
问题是这样子的:
协议要求字节低位在左,高位在右,对每个字节做转换处理,逐个交换其高低位,例如11010001,经过0->7,1->6,2->5,3->4对应位的交换,变成10001011。
这里就需要有位操作的知识,参考位操作运算有什么技巧?(附源码)
这里我们以8位数据高低位转换为例子:
1#include
23unsigned
char
highAndLowShiftHEX(unsigned
char
data);4void
printBin(int
n);56int
main
()
{78
highAndLowShiftHEX(209);9
return
0;10}1112unsigned
char
highAndLowShiftHEX(unsigned
char
data)
13{
14
unsigned
char
i;
15
unsigned
char
tmp=0x00;
16
f(or)(i=0;i>i)
19
//printBin(tmp);20
if(i=
0;
i
--)//略去高位0.39
{40
if(n41
}4243
for(;i>=0;
i
--)44
printf("%d",
(n45}
熟悉位操作,上述代码实现起来就比较简单。在(嵌入式开发)中这类问题通常使用蝶式交换法和查表法来实现。
高阶实现?
查表法就是将一些值存到内存中,在需要计算的时候查表,但是这种方法会占用额外的存储空间。
所以这里主要介绍一下蝶式交换法,我们以8位数据转换为例。
假设原始序列为:12345678
目标序列为:87654321
那么流程图如下:
由此完成了整个位的逆序转换,同样以11010001为例,下面是具体的实现代码:
1#include
23unsigned
char
highAndLowShiftHEX(unsigned
char
);4void
printBin(int
);56int
main
()
{78
highAndLowShiftHEX(209);9
return
0;10}1112unsigned
char
highAndLowShiftHEX(unsigned
char
data)
13{
14
data=(data>4);
15
data=((data=
0;
i
--)//略去高位0.33
{34
if(n35
}3637
for(;i>=0;
i
--)38
printf("%d",
(n39}
交换字节的高低位并不是一个很常见的问题,遇到该问题时,需要经过仔细的分析,加上对(C语言)位操作的熟练掌握,就能够很好的解决这一类的问题。
扩展
那么,我们将其扩展到16位半字数据的高低位转换。
其实原理是跟8位的时候是一样的,采用简单的移位方式对数据的高低位进行转换。熟悉位操作的话代码就相对简单了。
下面是对该思路的具体实现:
1#include
23void
expandPrintBin(int
val2);4unsigned
short
HighAndLowSwitchHEX(unsigned
short
data);56int
main
()
{78
HighAndLowSwitchHEX(38491);9
return
0;10}111213//由于二进制直观,故写了一个扩展的打印二进制的函数14void
expandPrintBin(int
val2)15{16
int
i,k;17
unsigned
char
*p
=
(unsigned
char*)
//从低位到高位,低端字节计算机18
for(
k
=
0;
k
=
0;
i--)22
{23
if(val2
25
else26
printf("0");27
}28
printf("
");29
}30}31unsigned
short
HighAndLowSwitchHEX(unsigned
short
data)32{33
unsigned
char
i
=
0;34
unsigned
short
temp
=
0x0000;3536
for(i
=
0;
i
>
i)
39
if(i
abcdefghijklmnop
目标序列为:ponmlkjihgfedcba
流程图如下所示:
由此完成了整个位的逆序转换,完成了(算法)的拓展,以1001011001011011为例,下面是具体的实现代码:
1#include
23unsigned
short
highAndLowShiftHEX(unsigned
short
data);4void
expandPrintBin(int
val2);56int
main
()
{78
highAndLowShiftHEX(38491);9
return
0;10}1112unsigned
short
highAndLowShiftHEX(unsigned
short
data)13{14
data
=
(data
>
8);
//010110111001011015
data
=
((data
=
0;
i--)32
{33
if(val2
35
else36
printf("0");37
}38
printf("
");39
}4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年全球及中国中置电机自行车行业头部企业市场占有率及排名调研报告
- 2025年全球及中国PTZ电子体积校正器行业头部企业市场占有率及排名调研报告
- 2025年全球及中国军用飞行器模拟器行业头部企业市场占有率及排名调研报告
- 2025年全球及中国工业木锯机行业头部企业市场占有率及排名调研报告
- 期末测试卷01【考试范围:6-10单元】(原卷版)
- 2025国际商业代理合同详细版样本
- 担保合同范文集锦年
- 健身房私教合同范文
- 电力设备采购合同模板
- 2025XL数字地震仪器租赁合同
- 《造血干细胞移植护理》课件
- 课题申报参考:全龄友好视角下的社区语言景观评估及空间优化研究
- 中央2025年公安部部分直属事业单位招聘84人笔试历年参考题库附带答案详解
- 五年级下册语文四大名著常考知识点
- 2025年1月日历表(含农历-周数-方便记事备忘)
- 2024年同等学力人员申请硕士学位英语试卷与参考答案
- 临床用血管理培训
- 工业自动化生产线操作手册
- 《走进神奇》说课稿
- 2024年内蒙古中考语文试卷五套合卷附答案
- 五年级下册语文教案 学习双重否定句 部编版
评论
0/150
提交评论