簡體   English   中英

在 C 中使用可變長度數組解析固定大小的消息

[英]Parsing a fixed-size message using variable length array in C

我的 C 程序必須像這樣解析一個固定長度的消息:

uint8_t message[8] = {80, 75, 73, 71, 1, 1, 1, 1};

另一個消息可能是:

uint8_t message[8] = {80, 75, 73, 71, 41, 42, 1, 1};

該消息包含一個 ASCII 字符串,1 表示字符串的結尾。 所以第一條消息的實際長度是4,第二條消息的實際長度是6。

我使用這種方法來提取消息:

1. Counting the message length
2. Initializing a variable length array with this value.
3. Using memcpy to copy the bytes.

代碼片段

在庫文件中:

計算長度:

...
#define LENGTH 100
// Global variables in library
uint8_t message[LENGTH];
uint8_t parsed_message[LENGTH];
uint8_t len = 0;
...

for (int i = 0; i < LENGTH; i++)
    {
        if (message[i] != 1)
        {
            parsed_message[i] = message[i];
            len++;
        }
        else
        {
            parsed_message[i] = '\0';
            len++;
            break;
        }

    }

吸氣劑功能:

void get_address(char * addr, int size)
{
    memcpy(addr, message, size);
}


uint8_t get_size(void)
{
    return len;
}

在主函數中:

char addr[get_size()];
get_address(addr, get_size());
printf("==== %s ==== ADDRESS\n", addr);

[我在片段中省略了大小和空檢查]

我在基於 ARM 的 32 位微控制器中使用 GCC 編譯器和 C99 標准。

我的問題是這種方法安全嗎? 或者我應該使用另一種方法。

在將消息發送到該程序的位置包含一個保存實際字節數的字節,然后使用該計數字節進行操作。

暫無
暫無

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

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