[英](C++) How do you Display a 2D Array with both Char and Int Values?
[英]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.