簡體   English   中英

你如何將幾個 long int 連接成一個 char 數組?

[英]How do you concatenate several long int into a char array?

我正在我的 Arduino 中開展一個項目,我想通過非常慢的無線電鏈路將幾個值發送到目的地。

我需要發送7 個long變量,每個變量 4 個字節 因此,與其將它們轉換為最多 64 字節數據的十六進制字符串,我更願意將它們全部存儲在一個數組中, char payload[32];

我試着做這樣的事情:

long first = 5000;
long second = 10000;
char payload[8];
long* pointer;

pointer = &payload[0];
*pointer = first;
pointer = &payload[4];
*pointer = second;

但是我遇到了轉換錯誤。

這樣做的正確方法是什么?

char*long*不兼容,因此在分配pointer變量時需要顯式類型轉換,例如:

long first = 5000;
long second = 10000;
char payload[sizeof(long)*2];
long* pointer;

pointer = reinterpret_cast<long*>(&payload[0]);
*pointer = first;
pointer = reinterpret_cast<long*>(&payload[4]);
*pointer = second;

或者(更安全),使用memcpy()代替,例如:

long first = 5000;
long second = 10000;
char payload[sizeof(long)*2];

memcpy(&payload[0], &first, sizeof(first));
memcpy(&payload[4], &second, sizeof(second));

話雖如此,如果要確保使用 32 位 integer 進行傳輸,則確實應該使用int32_t而不是long long在所有平台上都不是 32 位的,盡管它在 Arduino 上(也就是說,將來永遠不會改變)。 當您需要使用特定的位大小時,您應該始終使用固定寬度類型。

暫無
暫無

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

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