雖然平常開會都會討論個人進度,但因為自己不是負責的人,故也不知道原本是如何實作的?
現在變成自己要做,還是先來研究一下,有沒有什麼簡單又可以加速開發的方式?
看了一下他之前的 Code,原來 UEFI Shell 中間過程的傳遞也是一個 C struct 的變數,只是再設計成另外一種格式轉成文字檔,然後由 Windows 的另一個 Tool 來接手 parsing。
看到這裡我就覺得有點阿雜,感覺一直在訂 Spec 寫 Parser,我們似乎可以省略這個過程?反正原本的格式雖然是字串,但不參照 Spec,其實人也無法一眼看出那些數值的真實意義。
接著我直覺想到的就是使用 C struct 並搭配 fread and fwrite 函數,直接把資料存成 binary 檔案,反正現在常用的程式語言,都有 Binding C language 的能力,像我喜歡的 Go 就可以使用 cgo 的方式來使用 C Code!
剛才測試了一下,指定 struct alignment 的語法,VC and GCC 看起來都通用,最困難的點已經不是問題了,剩下的就是開發時 Debug 的問題了。
#include <stdio.h>
#pragma pack(push, 1)
struct Arg {
int id;
char name[3];
int command;
};
#pragma pack(pop)
int main(void)
{
struct Arg arg = {1, "AA", 2};
#if 1
FILE *f = fopen("struct.bin", "ab");
if (f) {
fwrite(&arg, 1, sizeof(arg), f);
fclose(f);
}
#else
FILE *f = fopen("struct.bin", "rb");
if (f) {
fread(&arg, 1, sizeof(arg), f);
fclose(f);
printf("%d, %s, %d \n", arg.id, arg.name, arg.command);
}
#endif
return 0;
}
沒有留言:
張貼留言