[問題] Strcut內任一member的offset以及size
開發平台(Platform): (Ex: Win10, Linux, ...)
Win10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
VC,GCC, C language
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
N/A
問題(Question):
typedef struct {
UINT8 MemberA;
UINT16 MemberB;
UINT32 MemberC;
UINT64 MemberD;
.....
UINT8 Reserved[1024];
} Setup;
取得一組數據 並轉型成Setup, 根據這個strcut每一個member一個一個掃過去得到member size
有什麼方法可以做到不知道member名稱下得到任一membert的size?
我知道取得一個member的offset/size可以用offsetof and sizeof
offsetof (struct Setup, MemberA);
這方法必須得知道member名稱為MemberA
但目前遇到struct member龐大且不固定 無法指定member
例如上面的struct會變成如下 一個reseved轉成MemberE
typedef struct {
UINT8 MemberA;
UINT16 MemberB;
UINT32 MemberC;
UINT64 MemberD;
.....
UINT8 MemberE;
UINT8 Reserved[1023];
} Setup;
煩請高手賜教
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 110.30.121.152 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1624325692.A.4EA.html
→
06/22 10:06,
3年前
, 1F
06/22 10:06, 1F
→
06/22 10:54,
3年前
, 2F
06/22 10:54, 2F
※ 編輯: shinchun (210.61.233.66 臺灣), 06/22/2021 10:55:40
推
06/22 11:06,
3年前
, 3F
06/22 11:06, 3F
→
06/22 11:07,
3年前
, 4F
06/22 11:07, 4F
推
06/22 11:11,
3年前
, 5F
06/22 11:11, 5F
→
06/22 11:11,
3年前
, 6F
06/22 11:11, 6F
→
06/22 11:15,
3年前
, 7F
06/22 11:15, 7F
→
06/22 11:16,
3年前
, 8F
06/22 11:16, 8F
→
06/22 11:16,
3年前
, 9F
06/22 11:16, 9F
這個結構也不能隨便動 目的是一樣的struct會有三份數據
NewDefault,OldDefault,user setting
compare NewDefault.OldDefault知道那些membe default數值有變動
接著把變動的部分sync to user setting
但是sync to user setting之前又得Compare OldDefault/user setting compare
看看user改過那些setting 這些setting又得保留
※ 編輯: shinchun (110.30.121.152 臺灣), 06/22/2021 11:54:37
→
06/22 13:08,
3年前
, 10F
06/22 13:08, 10F
→
06/22 13:08,
3年前
, 11F
06/22 13:08, 11F
→
06/22 13:10,
3年前
, 12F
06/22 13:10, 12F
→
06/22 13:10,
3年前
, 13F
06/22 13:10, 13F
推
06/22 14:20,
3年前
, 14F
06/22 14:20, 14F
→
06/22 14:20,
3年前
, 15F
06/22 14:20, 15F
→
06/22 14:21,
3年前
, 16F
06/22 14:21, 16F
→
06/22 14:21,
3年前
, 17F
06/22 14:21, 17F
→
06/22 14:21,
3年前
, 18F
06/22 14:21, 18F
→
06/22 14:22,
3年前
, 19F
06/22 14:22, 19F
→
06/22 14:23,
3年前
, 20F
06/22 14:23, 20F
ofsetof sizeof都得指定member name
code base也只能用C 沒法用C++
https://github.com/tianocore/edk2
不曉得有什麼macro可以達到掃所有member size?
→ F04E: 太複雜 跟著一起 update header file 不就好了 06/22 16:10
目前就是有類似的作法 但是maintain effort或是出錯機會比較大
推
06/22 20:16,
3年前
, 21F
06/22 20:16, 21F
→
06/22 20:16,
3年前
, 22F
06/22 20:16, 22F
推
06/22 20:19,
3年前
, 23F
06/22 20:19, 23F
→
06/22 20:19,
3年前
, 24F
06/22 20:19, 24F
跪求macro或是編譯器魔法
※ 編輯: shinchun (110.30.121.152 臺灣), 06/22/2021 21:55:28
→
06/22 22:04,
3年前
, 25F
06/22 22:04, 25F
→
06/22 22:28,
3年前
, 26F
06/22 22:28, 26F
→
06/22 22:28,
3年前
, 27F
06/22 22:28, 27F
因為strut一改影響很大
推
06/23 00:25,
3年前
, 28F
06/23 00:25, 28F
→
06/23 00:29,
3年前
, 29F
06/23 00:29, 29F
→
06/23 00:44,
3年前
, 30F
06/23 00:44, 30F
→
06/23 00:48,
3年前
, 31F
06/23 00:48, 31F
→
06/23 00:48,
3年前
, 32F
06/23 00:48, 32F
→
06/23 00:49,
3年前
, 33F
06/23 00:49, 33F
→
06/23 00:53,
3年前
, 34F
06/23 00:53, 34F
→
06/23 00:54,
3年前
, 35F
06/23 00:54, 35F
→
06/23 00:55,
3年前
, 36F
06/23 00:55, 36F
→
06/23 00:56,
3年前
, 37F
06/23 00:56, 37F
感謝各位高手 看來我得試試看UEFI架構內的別的方法試試看
※ 編輯: shinchun (110.30.121.152 臺灣), 06/23/2021 16:07:29
→
06/23 18:13,
3年前
, 38F
06/23 18:13, 38F
推
06/24 10:18,
3年前
, 39F
06/24 10:18, 39F
→
06/24 10:18,
3年前
, 40F
06/24 10:18, 40F
推
06/24 10:48,
3年前
, 41F
06/24 10:48, 41F
→
06/24 10:48,
3年前
, 42F
06/24 10:48, 42F
→
06/24 10:49,
3年前
, 43F
06/24 10:49, 43F
→
06/24 10:50,
3年前
, 44F
06/24 10:50, 44F
→
06/24 10:50,
3年前
, 45F
06/24 10:50, 45F
→
06/24 10:52,
3年前
, 46F
06/24 10:52, 46F
→
06/24 11:58,
3年前
, 47F
06/24 11:58, 47F
推
06/24 15:48,
3年前
, 48F
06/24 15:48, 48F
推
06/24 19:24,
3年前
, 49F
06/24 19:24, 49F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章