簡體   English   中英

c struct和memcpy(字節數組)

[英]c struct and memcpy (byte array)

我正在接收字節緩沖區數組,並嘗試將其復制到結構中:

我的結構是:

typedef struct mydata_block
{
    uint8_t cmd;
    uint32_t param;
    char str_buf[10];
    uint32_t crc32;
} mydata_t;

首先,發送數據的程序如下:

blockTX.cmd = 2

blockTX.str_buf =“ eee789”

blockTX.param = 1001

blockTX.crc32 = 3494074521

-

02-00-00-00-E9-03-00-00-65-65-65-37-38-39-00-00-00-00-00-00-99-58-43-D0

收到數據后,請使用以下memcpy代碼將數據復制到結構中:

    memcpy((uint8_t *)&blockRX,(uint8_t *)usbd_cdc_buffer,sizeof(blockRX));

一切看起來都很好,但不是cmd(它的1個字節,但是有填充?在結構上?)我該如何解決呢?

傳輸數據時需要考慮填充,大小,字節序等,因此您需要正確生成和解析字節流。 您可以使用googloe protobuf之類的東西來序列化和反序列化您可能穩定的數據。

但是,如果必須,您可以為結構賦予packed屬性。 這消除了所有填充和對齊限制。 這樣一來,您可以在沒有填充的情況下使用memcpy()結構,但代價是訪問結構本身的成員的速度較慢。 這樣做只有兩個很好的理由:

  1. 結構的對齊方式和填充方式取決於控件外部的力(必須與硬件或第三方軟件匹配)。
  2. 作為將數據轉換為主機格式的中間步驟。

暫無
暫無

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

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