C中的uint8_t到Struct

3phpmpom  于 2023-10-16  发布在  其他
关注(0)|答案(1)|浏览(123)

我使用的是STM32微控制器,通过一个USB接口接收数据。我想将接收到的数据转换为Mesaj结构,以便进一步处理。目前,我正在将数据收集到一个缓冲区(RxBuffer)中,我想知道如何将这些数据转换为“Mesaj”结构。下面是代码的一部分:

#define RxBufferSize 50
uint8_t RxBuffer[RxBufferSize];
typedef struct {
    uint8_t baslangic;
    uint16_t emirNo;
    uint8_t birimNo;
    uint32_t emirAdresi;
    uint8_t komut;
    uint8_t dataTipi;
    uint32_t data;
    uint8_t bitis;
} Mesaj;
    • 我在下面的代码片段中接收到RxBuffer,我想处理它,但首先,我想在检查RxBuffer的大小后将其转换为结构体。
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
    if (huart->Instance == USART1)
    {
        HAL_UARTEx_ReceiveToIdle_DMA(&huart1, RxBuffer, RxBufferSize);
        __HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT);
            
              for (int i = Size; i < RxBufferSize; i++)
        {
            RxBuffer[i] = 0;
        }
                            
        if (Size == 15) 
        {

        }
        else
        {

        }
    }
}

任何帮助都是感激不尽的。谢谢你,谢谢!

cpjpxq1n

cpjpxq1n1#

使用memcpy

Mesaj *buffToStuct(Mesaj *m, void *buff, size_t offset)
{
    unsigned char *ucbuff = buff;
    memcpy(m, ucbuff + offset, sizeof(*m));
    return m;
}

请记住,的格式必须与结构体相同(填充,endianess等)。
如果输入流没有填充,则打包结构:

typedef struct {
    uint8_t baslangic;
    uint16_t emirNo;
    uint8_t birimNo;
    uint32_t emirAdresi;
    uint8_t komut;
    uint8_t dataTipi;
    uint32_t data;
    uint8_t bitis;
} __attribute__((packed)) Mesaj;

相关问题