我想用字節數值和字符串一次初始化一個字節數組。基本上陣列是數據結構的序列化表示等用字節和字符串初始化C數組
struct foo {
uint8 param1;
uint8 stringLen;
const char * string;
uint8 param2;
};
儘管API期望字節數組,我有超過沒有控制。 API期望數組被靜態初始化爲sizeof
運算符來報告實際大小。我知道可以使用字符串文字或特定字節初始化一個數組,儘管任何初始化數組的嘗試都是以字符串文字作爲指針地址(這是什麼,這裏並不令人意外)。
我正在考慮定義我自己的struct
並用它初始化數組,但我不相信結構或字符串文字是編譯時序列化的。我似乎無法想到這樣的語法,我甚至不確定這是否可能。任何輸入讚賞。
最後的手段可能是像array[] = "\x66oo"
這樣的初始化數組,但這隻會比簡單的array[] = {0x66, 'o', 'o'}
略微維護,兩種解決方案都需要外部(python?)生成器。
您可以定義結構的初始化的'const'數組,它應該在編譯時初始化。但請注意結構填充,請參閱編譯器手冊,瞭解如何在沒有填充的情況下打包結構。 – 2015-03-03 11:16:35
@JoachimPileborg這是一個好主意,但它不會序列化字符串文字,編譯器仍然可以自由地將它們存儲在任何地方。一個固定大小的字符數組將會這樣做(如果字符串字面大小是固定的)。 – Vagish 2015-03-03 11:32:30
但是,IIUC,真正的問題是C字符串的標準初始化程序是否假定應該附加一個nul結束符? (字符串連接C字符串將允許'char array [] =「a」「\ x05」「Hello」「b」;',但生成的initalizer將是9個字節長而不是8個字節) – joop 2015-03-03 12:19:50