[英]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.