国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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("大端存儲");
}

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

    關注

    15

    文章

    1619

    瀏覽量

    82822
  • 字節
    +關注

    關注

    0

    文章

    44

    瀏覽量

    14379
  • 數據類型
    +關注

    關注

    0

    文章

    237

    瀏覽量

    14185

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    嵌入式中的浮點數據轉換為字節類型的三種方法

    一般是以字節的形式進行數據交互。要想傳輸一浮點數需要把浮點數轉換為字節的形式。 MCU不能直接保存浮點
    發表于 01-07 06:28

    為什么會有小端字節

    字節序,比如網絡傳輸和文件儲存。 計算機處理字節序的時候,不知道什么是高位字節,什么是低位字節。它只知道按順序讀取字節,先讀第一
    發表于 12-15 06:24

    C語言自動類型轉換

    一、自動類型轉換 數據類型存在自動轉換的情況. 自動轉換發生在不同數據類型運算時,在編譯的時候自動完成。 char類型
    發表于 11-25 08:04

    對UART0輸入到串口的char數據轉換成16進制的寄存器常用int相關處理

    根據ascii碼的對照,將char轉換成int數據。 然后我們又遇到問題,若是想將uart0接受到的8
    發表于 10-31 07:58

    使用ftp下載固件,每次都會或多或少接收錯幾個字節,怎么改善?

    使用EC600的4G模組,在進行遠程FTP下載固件升級時,每次都會或多或少接收錯幾個字節,偶爾才出現一次接收完全正確的固件,所以導致重啟后qboot校驗固件CRC不過,升級失敗現象,這種現象一般應該如何查詢?準備調整
    發表于 09-18 07:23

    如何通過VCOM將4CAN FD消息轉換為SLCAN?

    通過VCOM接口將M460系列微控制器(MCU)的4條CAN FD消息轉換為SLCAN協議,并發送到計算機。
    發表于 08-19 06:23

    TC334 uart dma發送數據時,只能發送17個字節,怎么解決?

    具體情況:配置串口發送,具體配置情況如下,對于17字節內的數據包能夠正常發送,大于17字節數據包只能發送前17字節。(已做好
    發表于 08-04 07:18

    如何使用20829 can-fd發送64字節擴展標識符數據幀?

    numberOfFIFOElements更改為16。 使用兩20829 EVK進行測試,最大傳輸數據大小為15個字節。DLC范圍是0~15 uint32數據,但實際上,另一
    發表于 08-04 06:56

    STM32407使用串口閑時中斷+DMA方式接收最大接收字節是多少?

    使用串口閑時中斷+DMA方式接收數據,波特率為460800,DMA接收長度為1024個字節,并開啟串口閑時中斷,當上位機一次發送520個字節,我發現串口產生了兩次中斷,第一次接收的最大字節
    發表于 07-22 08:16

    USB芯片CY7C68013A和FPGA進行通信,從EP6讀取512字節是正常的,但是讀取2個字節失敗,為什么?

    大家好,USB芯片CY7C68013A和FPGA進行通信,從EP6讀取512字節是正常的,但是讀取2個字節失敗(fpga端一直在發)Bulk IN failed,謝謝
    發表于 05-30 07:12

    使用FX3測試程序中的數據流時,遇到了每8個字節重復的場景,是什么原因導致的?

    我在使用 FX3 測試程序中的數據流時,遇到了每 8 個字節重復的場景。
    發表于 05-21 06:59

    當從接收DMA一次接收一個字節時,如何檢查是否已接收到任意長度的所有數據

    當從接收 DMA 一次接收一個字節時,如何檢查是否已接收到任意長度的所有數據包?
    發表于 04-21 08:22

    請問STM32MP135 I2C MemAddress最多兩個字節嗎?

    MP135的I2C底層讀寫函數里面對于MemAddress做了限制, 最多兩個字節的MemAddress, 這是MP135的硬件限制 還是 單純的在功能的實現上做了限制? 我現在對接的設備 他必須要三字節的MemAddress,怎么辦
    發表于 03-14 08:23

    設計了一基于浮點數運算的協處理器,使用C語言編程時沒法輸入float數據,請問有哪些部分需要修改?

    我設計了一基于浮點數運算的協處理器,使用C語言編程時沒法輸入float數據,請問有哪些部分需要修改?SDK,EXU_decoder浮點寄存器都需要修改嗎,謝謝
    發表于 03-07 16:03

    將YOLOv4模型轉換為IR的說明,無法將模型轉換為TensorFlow2格式怎么解決?

    遵照 將 YOLOv4 模型轉換為 IR 的 說明,但無法將模型轉換為 TensorFlow2* 格式。 將 YOLOv4 darknet 轉換為
    發表于 03-07 07:14