8

ビットフィールドを使用して、FPU のないマイクロコントローラー用に作成しようとしている float ライブラリに簡単にアクセスしています。

問題は、ビットフィールドで動作させることができないように見えることです。見てみましょう:

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ビット、そして最後のビットです。ビットフィールドの使用を完全に誤解していない限り。パックを使用すると問題が解決すると思っていましたが、ご覧のとおりそうではありませんでした。

どんな助けでも本当にありがたいです。グーグルで何度もこのサイトにたどり着いたので、大きな期待を寄せています。

4

3 に答える 3

18

ユニオン内に構造体がない可能性があります。

typedef struct
{
    union{
       struct {
           unsigned long mantissa: 23;
           unsigned long exponent: 8;
           unsigned long sign: 1;
       } float_parts;
       float all;
    };
}_float __attribute__((__packed__));

仮数/指数と符号の順序は、CPU のエンディアンに依存することに注意してください。

于 2009-02-25T19:05:15.223 に答える
0

問題はそれが労働組合だということです。それは「構造体」でなければなりません。

于 2009-02-25T19:05:42.337 に答える
0

glibc プラットフォームを使用している場合は、ieee754.h ヘッダー ファイルを確認できます。エンディアンに気を配ります。そうでない場合でも、検討する価値はあります。

于 2009-02-25T21:39:45.273 に答える