[問題] Byte資料個別定義

看板C_and_CPP作者 (小D(滴))時間16年前 (2009/04/02 16:29), 編輯推噓4(407)
留言11則, 3人參與, 最新討論串1/2 (看更多)
有一個問題想請教。 如果我有兩個BYTE 資料。 分別為 2bits 9 bits 2bits 2 bits 1bit xxoooooo ooowwaae 由於那9bits是要做計算 0x000 ~ 0x1FF 又不要影響到 其他bits資料。 不知道該如何定義?(下面的定義不知道是否正確?) 謝謝大家 =============================== union{ unsigned int byte; struct{ unsigned x:2; unsigned o:9; unsigned w:2; unsigned a:2; unsigned e:1; } bit; }PR; PR.bit.x = 2; PR.bit.o = 511; PR.bit.w = 1; PR.bit.a = 0; PR.bit.e = 1; PR.byte = 0xBFE9; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.80.6

04/03 00:39, , 1F
看起來沒什麼問題:)
04/03 00:39, 1F

04/03 00:41, , 2F
等等, 看您xxooww的圖示, 這幾bit到底是往MSB還是LSB放?
04/03 00:41, 2F

04/03 00:45, , 3F
x:bit 15-14 o:bit 13-5 w:bit 4-3 a:bit 2-1 e:bit 0
04/03 00:45, 3F

04/03 00:46, , 4F
所以應該xxoooooo 為LSB ooowwaae 為MSB
04/03 00:46, 4F

04/03 00:47, , 5F
簡單說, 這樣定義, xx是在LSB, e會是在MSB....
04/03 00:47, 5F

04/03 00:47, , 6F
另外, 只要兩BYTE, unsigned int應該可以換成unsigned
04/03 00:47, 6F

04/03 00:48, , 7F
short甚至是unsigned char byte[2]; 這樣:)
04/03 00:48, 7F

04/03 00:48, , 8F
?? x是bit 15-14, 那xxoooooo是MSB才對吧??
04/03 00:48, 8F

04/03 00:55, , 9F
個人覺得應該 e:1; a:2; w:2; o:9; x:2; 這順序才是@_@"
04/03 00:55, 9F

04/03 00:55, , 10F
話說回來, 這個不確定要不要考慮大小印弟安....Orz
04/03 00:55, 10F

04/03 01:25, , 11F
要。bit-fields 最後的 layout 跟編譯器有關
04/03 01:25, 11F
文章代碼(AID): #19rEVv2l (C_and_CPP)
文章代碼(AID): #19rEVv2l (C_and_CPP)