簡體   English   中英

使用memcpy將結構轉換為char數組

[英]Converting a struct to char array using memcpy

我試圖將以下結構轉換為char數組,以便可以通過串行端口發送它。

struct foo
{
    uint16_t voltage;
    char ID ;
    char TempByte;
    char RTCday[2];
    char RTCmonth[2];
    char RTCyear[2];
    char RTChour[2];
    char RTCmin[2];
    char Sepbyte;   
}dvar = { 500, 'X' , '>' , "18" , "10" , "15" , "20" , "15" , '#'};

然后,使用以下命令將其轉換為char數組:

char b[sizeof(struct foo)];
memcpy(b, &dvar, sizeof(struct foo));

但是由於某種原因,我在char數組中得到了這些尾隨值

0x0A 0xFF

我最初認為它正在獲取值,因為當我將其強制轉換為char數組時,它實際上已將其強制轉換為字符串,因此我雖然是NULL'\\ 0'

任何幫助將不勝感激。

謝謝

在現代處理器上,sizeof(結構數據下載)需要在32位邊界上對齊。 您的數據結構大小為8個字符+ 1個短整數(16位)。 編譯器需要在結構的大小上添加2個字符,以便在分配結構時能夠正確處理它。 由於您正在通過串行線路進行通信並且確切知道要發送的內容,因此您還可以指定願意通過串行線路發送的確切字節數:2 + / * 1 short * / + 8 (8個字節)。

我暗中懷疑您使用的是8位微控制器! 您可以通過打印b[sizeof(foo)]b[sizeof(foo)+1]進行調試,這將是您的兩個字符。 如果發現,則不應引用它們,它們不在char數組的范圍內。 例如n個元素數組[0 ..(n-1)](從您的結構中復制)

如果將未使用的元素添加到struct(或增加最終成員的大小),則char數組可以終止於'\\ 0'-編譯器可能希望這樣做。

或者按照@Melebius所示進行指針分配。

暫無
暫無

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

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