在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何把這4個字節的數據轉換為float型呢?

GReq_mcu168 ? 來源:痞子衡嵌入式 ? 作者:痞子衡嵌入式 ? 2022-05-23 09:21 ? 次閱讀

嵌入式系統的串口數據傳輸都是以字節為單位,但是有些特殊的數據類型,比如浮點型float a=231.5,在內存是如何表示的呢?

我們知道浮點型float數據類型占用4個字節,實際上在內存當中a=0x43678000,只是嵌入式芯片訪問a時,知道a是浮點型數據,所以一次性讀取4個字節,而且也按照浮點型的數據表示規定,將a轉換為十進制的可讀數據231.5。

如果我們從串口接收到4個字節數據{0x43,0x67,0x80,0x00},如何把這4個字節的數據轉換為float型呢?

直接令float a=0x43678000這是不行的(不信的讀者可以自行驗證),這就是串口通訊當中經常遇到的問題,如果數據傳輸中包括了浮點型數據,在這里我們可以通過共用體或者結構體來解決。

對于共用體:

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

f的4個字節和s[4]的4個字節是共用一個區域,如果我們令f=231.5,然后通過VS的監視窗查看s[4]的數值,下面是測試程序:

#include
//共用體
//floatf;//4個字節
//chars[4];//4個字節
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
");
}

監視結果如下所示:

9b3d481a-d8a3-11ec-ba43-dac502259ad0.jpg

我們同樣適用結構體做了相同的實驗,將數組s[4]={0x00,0x80,0x67,0x43}的首地址s[0]強制轉換賦值給結構體z,最后打印輸出的結果也是231.5

這里我們看到原本應該是0x4367_8000的數據實際存儲的時候變成了00H 80H 67H 43H,這是因為計算機系統使用了小端存儲,什么是小端存儲呢?

我們都知道,對于一個超過一個字節的數據,其在計算機中的存儲需要跨越字節。某些機器選擇在存儲器中按照從最低為有效字節到最高有效字節的順序存儲對象,而另一些機器則按照從最高為有效字節到到最低為有效字節的順序存儲,前一種存儲方式被稱為小端存儲,后一種方式被稱為大端存儲。

舉個例子,對于十六進制數0x01234567,其字節的存儲順序便依賴于機器,如下:

9b634038-d8a3-11ec-ba43-dac502259ad0.png我們可以通過下面的函數測試是大端存儲還是小端存儲:
voidtest(void)
{
inta=1;
unsignedchar*start=&a;
if(*start==1)
printf("小端存儲");
elseif(*start==0)
printf("大端存儲");
}

審核編輯 :李倩
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 串口
    +關注

    關注

    14

    文章

    1557

    瀏覽量

    76735
  • 字節
    +關注

    關注

    0

    文章

    40

    瀏覽量

    13775
  • 數據類型
    +關注

    關注

    0

    文章

    236

    瀏覽量

    13638

原文標題:串口傳輸數據時,結構體如何轉換?

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ADS1274用DRDY+TDM輸出模式下,讀到的第一個字節是無效的,為什么?

    今天調試中發現一問題,1274在用DRDY+TDM輸出模式下,讀到的第一個字節是無效的! 配置是4通道,在DRDY下降沿產生后,等待5us(采樣率25K,即間隔40us)給出SPI的SCLK
    發表于 01-08 08:17

    ADS1299-4配置完成后DOUT輸出還是216個字節嗎?

    4通道1299芯片 其配置完成后DOUT輸出還是216個字節嗎?還是說變成了120個字節
    發表于 11-21 07:08

    請問TLV320AIC3106怎么轉換32位float數據

    TLV320AIC3106怎么轉換32位float數據
    發表于 11-05 08:07

    MAX9877將數據發送到NVM中,發送數據時,必須要填滿128個字節嗎?

    想請問一下9877將數據發送到NVM中,一頁的數據傳輸,最多可以發送128字節。想問一下發送數據時,必須要填滿128個字節嗎,還是可以只要發
    發表于 07-24 07:00

    使用ESP32的NVS-BLOB存儲12000個字節數據報錯的原因?

    使用ESP32的NVS-BLOB存儲12000個字節數據,每次完全擦除flash后編程寫第一次都沒問題,但之后再寫就報錯誤ESP_ERR_NVS_NOT_ENOUGH_SPACE (0x1105
    發表于 06-21 06:53

    ESP32 BLE使用nimble協議棧怎樣才能發送超過20個字節數據

    我在使用藍牙傳送傳感器數據,目前只能發送20個字節大小的數據包,請問大家是如何實現發送大于20字節數據包的。我想嘗試將
    發表于 06-17 07:18

    請問ESP32C3串口收數據多于120個字節如何處理?

    請教一問題,我現在用ESP32C3收數據,串口最大接收120字節就進入事件了,請問ESP32C3串口收數據多于120個字節如何處理。 例如
    發表于 06-06 08:02

    修改USB_HID的報告ID,receive_buffer會改變前4個字節,為什么?

    修改USB_HID的報告ID,receive_buffer會改變前4個字節
    發表于 05-06 06:36

    STM32 USB CDC為什么只能發送4096個字節

    ( USBD_Device, (uint8_t *)Imgbuf, 59904); USBD_CDC_TransmitPacket( USBD_Device); 發送數據,結果每次發送到4096個字節后死掉
    發表于 04-29 07:49

    stm32讀sd卡單個數據塊最后80個字節全是0,怎么crc還校驗正確?

    stm32 讀sd卡單個數據塊最后80個字節全是0,怎么crc還校驗正確。PS. 用的是SDIO口,4bit總線,1M的SDIO_CK.
    發表于 04-25 07:19

    STM32G0B1RE 從SPI+DMA返回數據時開始3個字節錯誤的原因?怎么解決?

    的執行時間。通過MISO引腳可以看到前3個字節為0xF1,3個字節實際上為上一SPI通訊的末尾3字節,后面的"0x01 0x0
    發表于 04-07 06:20

    串口數據傳輸共用體與結構體之間的轉換技巧

    如果我們從串口接收到4個字節數據{0x43,0x67,0x80,0x00},如何4個字節
    的頭像 發表于 03-22 12:28 ?764次閱讀
    串口<b class='flag-5'>數據</b>傳輸共用體與結構體之間的<b class='flag-5'>轉換</b>技巧

    STM32G070掛載4設備,切換SPI極性和相位之后,第一個字節SCLK只有7,MOSI數據也不對是為什么?

    SCLK。一字節8,每個字節之間的空隙比正常的clk間隔大一些,所以第一個字節是少了一SCLK,而且MOSI上發送的
    發表于 03-15 07:17

    使用i2c從從站讀取兩個字節時,為什么主站只發送一個字節后就發送NACK

    I2C_RX_OVERFLOW,并陷入 while 循環直到超時。 但當我在 i2c 讀取之前禁用中斷時,問題就消失了。 那么,為什么主站只發送一個字節后就發送 NACK ?讀取過程不能被中斷打斷嗎?
    發表于 03-05 07:42

    用tc234l做QSPI實驗,設置loopback模式,當發送超過3個字節時接收緩存前三個字節總是滯后一周期的原因?

    用tc234l 做QSPI實驗,設置loopback模式,當發送超過3個字節時,接收緩存前三個字節總是滯后一周期(例如周期性發送四個字節數據,每次
    發表于 02-20 07:34
    主站蜘蛛池模板: 久久婷婷五综合一区二区| 久久综合九色综合97_ 久久久| 免费在线亚洲| 中国一级特黄特级毛片| 中国成熟xxx视频| 他也色在线视频| 天天看天天碰| 手机看片福利久久| 黄黄视频在线观看| 奇米四色777亚洲图| 热re99久久国产精品| 妖精视频永久在线入口| 色综合中文网| 免费人成在线观看网站| 四虎影院最新网站| 色综合综合网| 快色视频免费观看| bt种子磁力天堂torrent| 天天综合天天综合| 俄罗斯欧美色黄激情| 亚洲欧美色一区二区三区| 一级毛片a| 日本黄色美女视频| 国产高清在线| 日韩第十页| www.亚洲5555.com| 日本三人交xxx69视频| 日韩精品卡4卡5卡6卡7卡| 亚洲人成网站色7777| 麒麟色欧美影院在线播放| 国产中出视频| 人人爱天天做夜夜爽| 美国人与性xxxxxxx| 一区二区三区伦理| 男女免费在线视频| 一级特黄aaa大片大全| 2022年国产精品久久久久| 5060午夜一级| 老色鬼久久综合第一| 天天摸天天操天天射| 黄色片网站观看|