[英]What's the correct way of using bitfields in C?
我正在使用位域來輕松訪問我正在嘗試為沒有 FPU 的微控制器制作的浮點庫。
問題是我似乎無法使其與位域一起使用。 看一看:
typedef struct
{
union{
unsigned long mantissa: 23;
unsigned long exponent: 8;
unsigned long sign: 1;
float all;
};
}_float __attribute__((__packed__));
問題是,當我嘗試訪問或更改任何內容時,它會將位域分別視為從末尾開始的 1、8、23 位。 雖然它應該是從末尾開始的 23 位,然后是 8 位,然后是最后一位。 除非我完全誤解了位域的使用。 我認為使用打包可以解決問題,但正如您所見,它沒有。
任何幫助將非常感激。 我不止一次在谷歌搜索時被引導到這個網站,所以我寄予厚望。
您可能在工會中缺少一個結構。
typedef struct
{
union{
struct {
unsigned long mantissa: 23;
unsigned long exponent: 8;
unsigned long sign: 1;
} float_parts;
float all;
};
}_float __attribute__((__packed__));
請注意,尾數/指數和符號的順序取決於 CPU 的字節序。
問題是它是一個工會。 它應該是“結構”。
如果您使用的是 glibc 平台,則可以查看 ieee754.h header 文件。 它關心字節序的東西。 如果沒有,它仍然可能值得一看。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.