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