下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第第頁嵌入式開發(fā)中字節(jié)高低位轉(zhuǎn)換如何實(shí)現(xiàn)蝶式交換。
問題是這樣子的:
協(xié)議要求字節(jié)低位在左,高位在右,對每個(gè)字節(jié)做轉(zhuǎn)換處理,逐個(gè)交換其高低位,例如11010001,經(jīng)過0->7,1->6,2->5,3->4對應(yīng)位的交換,變成10001011。
這里就需要有位操作的知識,參考位操作運(yùn)算有什么技巧?(附源碼)
這里我們以8位數(shù)據(jù)高低位轉(zhuǎn)換為例子:
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}
熟悉位操作,上述代碼實(shí)現(xiàn)起來就比較簡單。在(嵌入式開發(fā))中這類問題通常使用蝶式交換法和查表法來實(shí)現(xiàn)。
高階實(shí)現(xiàn)?
查表法就是將一些值存到內(nèi)存中,在需要計(jì)算的時(shí)候查表,但是這種方法會占用額外的存儲空間。
所以這里主要介紹一下蝶式交換法,我們以8位數(shù)據(jù)轉(zhuǎn)換為例。
假設(shè)原始序列為:12345678
目標(biāo)序列為:87654321
那么流程圖如下:
由此完成了整個(gè)位的逆序轉(zhuǎn)換,同樣以11010001為例,下面是具體的實(shí)現(xiàn)代碼:
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}
交換字節(jié)的高低位并不是一個(gè)很常見的問題,遇到該問題時(shí),需要經(jīng)過仔細(xì)的分析,加上對(C語言)位操作的熟練掌握,就能夠很好的解決這一類的問題。
擴(kuò)展
那么,我們將其擴(kuò)展到16位半字?jǐn)?shù)據(jù)的高低位轉(zhuǎn)換。
其實(shí)原理是跟8位的時(shí)候是一樣的,采用簡單的移位方式對數(shù)據(jù)的高低位進(jìn)行轉(zhuǎn)換。熟悉位操作的話代碼就相對簡單了。
下面是對該思路的具體實(shí)現(xiàn):
1#include
23void
expandPrintBin(int
val2);4unsigned
short
HighAndLowSwitchHEX(unsigned
short
data);56int
main
()
{78
HighAndLowSwitchHEX(38491);9
return
0;10}111213//由于二進(jìn)制直觀,故寫了一個(gè)擴(kuò)展的打印二進(jìn)制的函數(shù)14void
expandPrintBin(int
val2)15{16
int
i,k;17
unsigned
char
*p
=
(unsigned
char*)
//從低位到高位,低端字節(jié)計(jì)算機(jī)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
目標(biāo)序列為:ponmlkjihgfedcba
流程圖如下所示:
由此完成了整個(gè)位的逆序轉(zhuǎn)換,完成了(算法)的拓展,以1001011001011011為例,下面是具體的實(shí)現(xiàn)代碼:
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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 贛南科技學(xué)院《農(nóng)業(yè)標(biāo)準(zhǔn)化概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛東學(xué)院《中國古代文學(xué)專題》2023-2024學(xué)年第一學(xué)期期末試卷
- 甘孜職業(yè)學(xué)院《影視廣告創(chuàng)意與策劃》2023-2024學(xué)年第一學(xué)期期末試卷
- 甘肅中醫(yī)藥大學(xué)《邏輯與邏輯思維》2023-2024學(xué)年第一學(xué)期期末試卷
- 科室醫(yī)療質(zhì)量與安全管理制度范文(4篇)
- 2025年1月日歷表(含農(nóng)歷-周數(shù)-方便記事備忘)
- 藥房服務(wù)培訓(xùn)課件
- 信息安全事件課件
- 小學(xué)生起床圖片課件
- 益陽定點(diǎn)月嫂培訓(xùn)課件
- 物業(yè)年終總結(jié)匯報(bào)工作
- 2024-2025學(xué)年上學(xué)期期中教育學(xué)業(yè)質(zhì)量監(jiān)測八年級生物學(xué)試卷
- 醫(yī)院住院病歷質(zhì)量檢查評分表(評分標(biāo)準(zhǔn))
- 員工安全記分管理實(shí)施細(xì)則
- 12.1 擁有積極的人生態(tài)度(教學(xué)設(shè)計(jì))2024七年級道德與法治上冊
- 四川省政治會考試卷與答案
- 人教版小學(xué)三年級數(shù)學(xué)上冊期末復(fù)習(xí)解答題應(yīng)用題大全50題含答案
- 2024部編版語文一年級上冊第六單元大單元備課
- 視聽說課程(《走遍美國》)教學(xué)方案
- 高中體育與健康-短跑教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 核心素養(yǎng)理念下的音樂“大單元教學(xué)”
評論
0/150
提交評論