如何確定位域的順序?我可以通過執行x.c來更改位域的元素,其中x是結構類型的變量。我試圖掩飾它並將其打印出來,但我只能打印結構中的每個元素,而不是整個變量。我試圖給一個位域的元素指定一個指針,但是它出現了一個錯誤。確定C編譯器的位域順序的最佳方法是什麼?例如,這個結構將以什麼順序表示?確定位域的順序C
struct bit_fields
{
unsigned int a : 6,
b : 8,
c : 18;
}
如何確定位域的順序?我可以通過執行x.c來更改位域的元素,其中x是結構類型的變量。我試圖掩飾它並將其打印出來,但我只能打印結構中的每個元素,而不是整個變量。我試圖給一個位域的元素指定一個指針,但是它出現了一個錯誤。確定C編譯器的位域順序的最佳方法是什麼?例如,這個結構將以什麼順序表示?確定位域的順序C
struct bit_fields
{
unsigned int a : 6,
b : 8,
c : 18;
}
根據C11
,章§6.7.2.1/ P11
[....]位字段的分配單位(高階內 低階的順序或低階到高階)是實現定義的。未指定可尋址存儲單元的對齊方式 。
要知道的最好方法是在您的平臺上檢查您的編譯器文檔和ABI。
對不起,聽起來像一個完整的初學者,但什麼是ABI?我在哪裏可以檢查它? – danielwestfall
@danielwestfall https://en.wikipedia.org/wiki/Application_binary_interface –
@danielwestfall ABI是「應用程序二進制接口」,它是您的特定系統的低級框架,它指定事物如何在內存中分配等等。 – Lundin
爲每個字段準備一個具有良好識別位模式的實例,memcpy將它存儲到適當大小的無符號字符數組中,並查看每個字段的位置。 –