簡體   English   中英

如何讀取使用 memcpy 的數據包

[英]How to read a packet that used memcpy

    uint8_t sendPacket[200];
    
    float a = 22.0f;  

char buffer[4] ={0x01,0x02,0x03,0x04};


    memcpy(&buffer, &a, sizeof(a));
    memcpy(sendPacket+92,buffer,sizeof(buffer));
            
    HAL_UART_Transmit(&huart7, (uint8_t*)sendPacket, length+5, 0xFFFF);

我使用上面的代碼,但我知道 memcpy 復制了 memory,但是當我查看 Packet 中的值時,值出來的很奇怪

上面還有其他的和弦,但是幾乎是重復的,所以我把它拿出來了

應該是通過藍牙傳輸的,但是在通過藍牙傳輸的地方正常出來了,但是出來的時候很奇怪

首先想把stm32中的數據包發到別的地方取值,live watch的結果和圖片一樣

a 包含浮點值

在此處輸入圖像描述

要再次讀取浮點數,您可以例如將 memcpy 轉換為浮點數:

float a_received = 0.0f;
memcpy(&a_received, &sendPacket[92], sizeof(a_received));

正如 user694733 指出的那樣,使用 memcpy。

“當我查看 Packet 中的值時,值出來的很奇怪”

當您查看sendPacket時,您看到的是原始字節。 要檢查您是否在正確的位置復制了正確的浮點數,您需要將數組中的 4 個字節解釋為浮點值。 這基本上是調試器或printf會做的事情。

例如,數字22.0f在 IEE754 浮點數表示中由0x41b00000表示,因此您應該在數組00 00 b0 41中看到,例如在小端系統上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM