91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

串口傳輸數(shù)據(jù)時(shí),結(jié)構(gòu)體如何轉(zhuǎn)換?

Q4MP_gh_c472c21 ? 來(lái)源:嵌入式專(zhuān)欄 ? 作者:嵌入式專(zhuān)欄 ? 2022-04-08 09:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式系統(tǒng)的串口數(shù)據(jù)傳輸都是以字節(jié)為單位,但是有些特殊的數(shù)據(jù)類(lèi)型,比如浮點(diǎn)型float a=231.5,在內(nèi)存是如何表示的呢?

我們知道浮點(diǎn)型float數(shù)據(jù)類(lèi)型占用4個(gè)字節(jié),實(shí)際上在內(nèi)存當(dāng)中a=0x43678000,只是嵌入式芯片訪問(wèn)a時(shí),知道a是浮點(diǎn)型數(shù)據(jù),所以一次性讀取4個(gè)字節(jié),而且也按照浮點(diǎn)型的數(shù)據(jù)表示規(guī)定,將a轉(zhuǎn)換為十進(jìn)制的可讀數(shù)據(jù)231.5。

如果我們從串口接收到4個(gè)字節(jié)數(shù)據(jù){0x43,0x67,0x80,0x00},如何把這4個(gè)字節(jié)的數(shù)據(jù)轉(zhuǎn)換為float型呢?

直接令float a=0x43678000這是不行的(不信的讀者可以自行驗(yàn)證),這就是串口通訊當(dāng)中經(jīng)常遇到的問(wèn)題,如果數(shù)據(jù)傳輸中包括了浮點(diǎn)型數(shù)據(jù),在這里我們可以通過(guò)共用體或者結(jié)構(gòu)體來(lái)解決。

對(duì)于共用體:

typedefunion
{
floatf;
unsignedchars[4];
}Union_test;

f的4個(gè)字節(jié)和s[4]的4個(gè)字節(jié)是共用一個(gè)區(qū)域,如果我們令f=231.5,然后通過(guò)VS的監(jiān)視窗查看s[4]的數(shù)值,下面是測(cè)試程序:

#include
//共用體
//floatf;//4個(gè)字節(jié)
//chars[4];//4個(gè)字節(jié)
typedefunion
{
floatf;
unsignedchars[4];
}Union_test;
typedefstructst
{
floatf1;
}Struct_test;
voidmain(void)
{
floata=231.5;
Union_testx;
Struct_testz;
x.f=a;
z=*(Struct_test*)(&(x.s));
printf("z=%.2f
",(double)z.f1);
printf("Endofthisprogramme
");
}

監(jiān)視結(jié)果如下所示:

8a680a3a-b6ba-11ec-aa7f-dac502259ad0.jpg

我們同樣適用結(jié)構(gòu)體做了相同的實(shí)驗(yàn),將數(shù)組s[4]={0x00,0x80,0x67,0x43}的首地址s[0]強(qiáng)制轉(zhuǎn)換賦值給結(jié)構(gòu)體z,最后打印輸出的結(jié)果也是231.5

這里我們看到原本應(yīng)該是0x4367_8000的數(shù)據(jù)實(shí)際存儲(chǔ)的時(shí)候變成了00H 80H 67H 43H,這是因?yàn)橛?jì)算機(jī)系統(tǒng)使用了小端存儲(chǔ),什么是小端存儲(chǔ)呢?

我們都知道,對(duì)于一個(gè)超過(guò)一個(gè)字節(jié)的數(shù)據(jù),其在計(jì)算機(jī)中的存儲(chǔ)需要跨越字節(jié)。某些機(jī)器選擇在存儲(chǔ)器中按照從最低為有效字節(jié)到最高有效字節(jié)的順序存儲(chǔ)對(duì)象,而另一些機(jī)器則按照從最高為有效字節(jié)到到最低為有效字節(jié)的順序存儲(chǔ),前一種存儲(chǔ)方式被稱(chēng)為小端存儲(chǔ),后一種方式被稱(chēng)為大端存儲(chǔ)。

舉個(gè)例子,對(duì)于十六進(jìn)制數(shù)0x01234567,其字節(jié)的存儲(chǔ)順序便依賴(lài)于機(jī)器,如下:

8a7c3104-b6ba-11ec-aa7f-dac502259ad0.png我們可以通過(guò)下面的函數(shù)測(cè)試是大端存儲(chǔ)還是小端存儲(chǔ):
voidtest(void)
{
inta=1;
unsignedchar*start=&a;
if(*start==1)
printf("小端存儲(chǔ)");
elseif(*start==0)
printf("大端存儲(chǔ)");
}

審核編輯 :李倩
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式芯片
    +關(guān)注

    關(guān)注

    4

    文章

    244

    瀏覽量

    28431
  • 串口
    +關(guān)注

    關(guān)注

    15

    文章

    1620

    瀏覽量

    82872
  • 傳輸數(shù)據(jù)
    +關(guān)注

    關(guān)注

    1

    文章

    128

    瀏覽量

    16508

原文標(biāo)題:串口傳輸數(shù)據(jù)時(shí),結(jié)構(gòu)體如何轉(zhuǎn)換?

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    ADC轉(zhuǎn)換-DMA傳輸

    傳輸 ADC_InitStruct.ADC_Align = ADC_AlignRight; //ADC轉(zhuǎn)換結(jié)果右對(duì)齊 ADC_InitStruct.ADC_AccEn
    發(fā)表于 01-27 07:27

    10個(gè)例子代碼,C語(yǔ)言結(jié)構(gòu)的高級(jí)

    ;, current->data); current = current->next; } return 0; } 這個(gè)例子展示了結(jié)構(gòu)的自引用,其中每個(gè)結(jié)構(gòu)體節(jié)點(diǎn)包含一個(gè)
    發(fā)表于 01-05 06:32

    一個(gè)經(jīng)典的結(jié)構(gòu)和聯(lián)合體共用的實(shí)例

    Linux 中可以 使用 sizeof 進(jìn)行獲取,默認(rèn)為字節(jié)對(duì)齊的大小。 聯(lián)合體 聯(lián)合體的參數(shù)共享同一個(gè)內(nèi)存地址,所占的內(nèi)存大小完全是由聯(lián)合體中參數(shù)類(lèi)型決定字長(zhǎng),然后數(shù)據(jù)共享,內(nèi)存共享等。 結(jié)構(gòu)和聯(lián)合體
    發(fā)表于 12-16 07:14

    結(jié)構(gòu)聲明與定義

    1、聲明 結(jié)構(gòu)的聲明使用struct關(guān)鍵字,如果我們想要把我們的學(xué)籍信息組織一下的話,可以這樣表示: struct Info { unsigned long identifier;//學(xué)號(hào)
    發(fā)表于 12-11 07:52

    typedef結(jié)構(gòu)使用

    雖然結(jié)構(gòu)的出現(xiàn)能夠讓我們有一個(gè)更科學(xué)的數(shù)據(jù)結(jié)構(gòu)來(lái)管理數(shù)據(jù),但是每次使用結(jié)構(gòu)都需要struct
    發(fā)表于 12-08 07:04

    為什么不建議用匿名結(jié)構(gòu)

    說(shuō)起匿名結(jié)構(gòu),想必大家第一感覺(jué)就是看著好高大上的名字,但實(shí)際上也就那樣。 typedef struct { union { struct { uint8_t bit_0:1
    發(fā)表于 12-04 07:39

    C語(yǔ)言結(jié)構(gòu)使用

    有時(shí)候需要將不同類(lèi)型的數(shù)據(jù)組合為一個(gè)整體,以便于引用。例如,一名學(xué)生有學(xué)號(hào)、姓名、性別、年齡等屬性,如果針對(duì)每個(gè)屬性都單獨(dú)定義一個(gè)變量,那么當(dāng)有多名學(xué)生時(shí)變量就難以分清。結(jié)構(gòu)就是用來(lái)管理不同類(lèi)
    發(fā)表于 11-12 08:30

    使用MCU200T開(kāi)發(fā)板的UART口進(jìn)行數(shù)據(jù)傳輸

    ;amp;gt;Source->Drivers文件夾里可以看到。 完成uart口初始化后,我們開(kāi)啟中斷發(fā)送使能。 根據(jù)鏈路狀態(tài)寄存器LSR的狀態(tài)判斷是否有數(shù)據(jù)從UART口傳輸
    發(fā)表于 10-28 08:16

    串行通信接口的結(jié)構(gòu)和功能

    串口通訊的數(shù)據(jù)包由發(fā)送設(shè)備通過(guò)自身的TXD接口傳輸到接收設(shè)備的RXD接口。在串口通訊的協(xié)議層中,規(guī)定了數(shù)據(jù)包的內(nèi)容,它由啟始位、主體
    的頭像 發(fā)表于 10-17 09:39 ?3945次閱讀
    串行通信接口的<b class='flag-5'>結(jié)構(gòu)</b>和功能

    【RA4M2-SENSOR】串口傳輸MPU6050陀螺儀數(shù)據(jù)測(cè)評(píng)

    RA4M2串口傳輸MPU6050陀螺儀數(shù)據(jù)測(cè)評(píng) 1. 套件概述 RA4M2-SENSOR 是一款基于 RA4M2 系列微控制器的評(píng)估套件,支持 TrustZone 技 術(shù)和片內(nèi)安全加密引擎(SCE
    發(fā)表于 09-14 11:41

    智嵌物聯(lián)串口轉(zhuǎn)光纖轉(zhuǎn)換器-延長(zhǎng)串口通信距離,增強(qiáng)抗干擾性能

    智嵌物聯(lián)研發(fā)的串口光纖收發(fā)器是將RS-485/422/RS232接口信號(hào)轉(zhuǎn)換為光纖接口傳輸,通信距離可達(dá)20Km,大大延長(zhǎng)串口的通信距離以及抗干擾性能。設(shè)備可自適應(yīng)
    的頭像 發(fā)表于 06-27 17:08 ?747次閱讀
    智嵌物聯(lián)<b class='flag-5'>串口</b>轉(zhuǎn)光纖<b class='flag-5'>轉(zhuǎn)換</b>器-延長(zhǎng)<b class='flag-5'>串口</b>通信距離,增強(qiáng)抗干擾性能

    串口網(wǎng)關(guān)是什么

    、MQTT等),實(shí)現(xiàn)串口設(shè)備與網(wǎng)絡(luò)之間的互聯(lián)互通。它解決了傳統(tǒng)串口設(shè)備無(wú)法直接接入網(wǎng)絡(luò)的問(wèn)題,是工業(yè)物聯(lián)網(wǎng)(IIoT)和智能設(shè)備管理中的關(guān)鍵組件。 核心功能 協(xié)議轉(zhuǎn)換串口
    的頭像 發(fā)表于 06-05 11:31 ?799次閱讀

    GLAD應(yīng)用:全息光柵模擬

    用于模擬全息記錄介質(zhì)中形成的梯度折射率分布。全息結(jié)構(gòu)一旦形成,就可以在傳輸過(guò)程中將一束入射光波逐漸轉(zhuǎn)換成形成體全息結(jié)構(gòu)的另一束光波。兩束光
    發(fā)表于 05-15 09:32

    C語(yǔ)言中結(jié)構(gòu)與聯(lián)合體的深度解析:內(nèi)存布局與應(yīng)用場(chǎng)景

    一、基礎(chǔ)概念與核心差異 1.1 結(jié)構(gòu)(Struct)的本質(zhì) **結(jié)構(gòu)是C語(yǔ)言中實(shí)現(xiàn)數(shù)據(jù)封裝的基石,其核心特征在于內(nèi)存獨(dú)立性。每個(gè)成員變量
    發(fā)表于 04-08 09:18

    如何通過(guò)串口將8路adc采集的數(shù)據(jù)傳輸給上位機(jī)顯示

    處理模塊data_dispose把采集的八路數(shù)據(jù)轉(zhuǎn)換為電壓數(shù)據(jù),并且轉(zhuǎn)換為BCD編碼。uart_byte模塊選擇對(duì)應(yīng)通道的數(shù)據(jù)發(fā)送給
    的頭像 發(fā)表于 03-14 09:09 ?1651次閱讀
    如何通過(guò)<b class='flag-5'>串口</b>將8路adc采集的<b class='flag-5'>數(shù)據(jù)傳輸</b>給上位機(jī)顯示