Swiftでビットフィールドを使用して1ビットを超える値を格納する方法

セザールギメネス

ではC私はこのような何かを行うことができます。

struct byte_nibbles {
    unsigned char b1: 4;
    unsigned char b2: 4;
    unsigned char b3: 4;
    unsigned char b4: 4;
    unsigned char b5: 4;
    unsigned char b6: 4;
    unsigned char b7: 4;
    unsigned char b8: 4;
};

union {
    unsigned long var;
    struct byte_nibbles b;
}
u;

int main(void)
{
    u.b.b1=0x01; u.b.b2=0x02; u.b.b3=0x03; u.b.b4=0x04;
    u.b.b5=0x05; u.b.b6=0x06; u.b.b7=0x07; u.b.b8=0x08;
    return 0;
}

したがって、byte_nibblesの特定の部分にアクセスできます。明らかに、これはほんの一例です。基本タイプに適合する任意のサイズのビットフィールドを作成することが可能です。

私の努力と多くの研究にもかかわらず、Swiftでこれを行う方法を理解できませんでしたビット単位を使用して同じ結果を得ることができますが、これは読みやすくエレガントではありません。

何か案が?

マーティンR

Swiftは単にビットフィールドをサポートしていないため

  • 代わりに(あなたの場合Int8次に大きい整数型を使用し、変数がより多くのメモリを必要とすることを受け入れるか、または
  • ビット演算を使用して、整数のさまざまな部分にアクセスします。

2番目のケースでは、アクセスを容易にするためにカスタム計算プロパティ定義できます例として:

extension UInt8 {
    var lowNibble : UInt8 {
        get {
            return self & 0x0F
        }
        set(newValue) {
            self = (self & 0xF0) | (newValue & 0x0F)
        }
    }

    var highNibble : UInt8 {
        get {
            return (self & 0xF0) >> 4
        }
        set(newValue) {
            self = (self & 0x0F) | ((newValue & 0x0F) << 4)
        }
    }
}


var byte : UInt8 = 0
byte.lowNibble = 0x01
byte.highNibble = 0x02
print(byte.lowNibble)
print(byte.highNibble)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Swiftでビットフィールド列挙型を宣言して使用する

分類Dev

ビットフィールドを使用して曜日を保存する方法は?

分類Dev

ビットフィールドとして.NETBigIntegerを使用する

分類Dev

バイトの残りのビットを使用して値を格納する方法は?

分類Dev

ビットフィールドメンバーのすべてのビットを1に設定する方法

分類Dev

6ビットを使用して値を格納するにはどうすればよいですか?

分類Dev

ビットフィールド(選択した日に使用)を読み取り、C#でビットフィールドから値を決定する

分類Dev

Cでビットフィールドを使用する場合

分類Dev

グリッドビュー境界フィールドを使用してドロップダウンリストの値を設定する方法

分類Dev

Javaコードを使用して1つのオブジェクトを使用して、ArrayListに3つのフィールドを格納する方法

分類Dev

Wojciech Mulaアルゴリズムを使用して、__ m256iをポップカウントし、結果を464ビットではなく32ビットワードに格納することは可能ですか?

分類Dev

bashを使用して、ビットレートが320kbpsを超えるすべてのmp3ファイルを一覧表示します

分類Dev

wcfサービスを使用して16kbを超えるアップロードされたファイルサイズを転送する方法

分類Dev

サービスアカウントを使用してアップロードする際にGoogleドライブの保存超えた問題を修正する方法

分類Dev

変数をシングルビットとして格納する

分類Dev

Cビットフィールドの別の部分を参照するビットを使用できますか?

分類Dev

空の値を整数フィールドとして格納する方法

分類Dev

値を直接割り当てたり、定数として格納したりする代わりに、長いビットシフトを使用することが一部のプログラマーの慣例であるのはなぜですか

分類Dev

CSSフィールドスタイルを使用して、ビューフィールドをグリッドの水平方向に中央揃えにする方法

分類Dev

CSSフィールドスタイルを使用して、ビューフィールドをグリッドの水平方向に中央揃えにする方法

分類Dev

ブレードビューで先行ゼロを使用して数値をフォーマットする

分類Dev

Cでビットフィールドを設定/反転する方法

分類Dev

ビットフィールドを介してcharのビットにアクセスする

分類Dev

32ビット整数を配列バッファに格納する方法は?

分類Dev

Matlabで匿名fncを使用するときに、値を配列に格納してプロットする方法

分類Dev

ビットコードを使用してopenSSLをビルドする

分類Dev

KartikのFileInputウィジェットを使用してYii2Frameworkで97.66KBを超えるファイルをアップロードできない

分類Dev

C#コードからSQLServerに格納されているビット単位のコード値を決定する方法

分類Dev

Windowsビルドサーバーでローカルパッケージを使用してドットネットビルドする方法

Related 関連記事

  1. 1

    Swiftでビットフィールド列挙型を宣言して使用する

  2. 2

    ビットフィールドを使用して曜日を保存する方法は?

  3. 3

    ビットフィールドとして.NETBigIntegerを使用する

  4. 4

    バイトの残りのビットを使用して値を格納する方法は?

  5. 5

    ビットフィールドメンバーのすべてのビットを1に設定する方法

  6. 6

    6ビットを使用して値を格納するにはどうすればよいですか?

  7. 7

    ビットフィールド(選択した日に使用)を読み取り、C#でビットフィールドから値を決定する

  8. 8

    Cでビットフィールドを使用する場合

  9. 9

    グリッドビュー境界フィールドを使用してドロップダウンリストの値を設定する方法

  10. 10

    Javaコードを使用して1つのオブジェクトを使用して、ArrayListに3つのフィールドを格納する方法

  11. 11

    Wojciech Mulaアルゴリズムを使用して、__ m256iをポップカウントし、結果を464ビットではなく32ビットワードに格納することは可能ですか?

  12. 12

    bashを使用して、ビットレートが320kbpsを超えるすべてのmp3ファイルを一覧表示します

  13. 13

    wcfサービスを使用して16kbを超えるアップロードされたファイルサイズを転送する方法

  14. 14

    サービスアカウントを使用してアップロードする際にGoogleドライブの保存超えた問題を修正する方法

  15. 15

    変数をシングルビットとして格納する

  16. 16

    Cビットフィールドの別の部分を参照するビットを使用できますか?

  17. 17

    空の値を整数フィールドとして格納する方法

  18. 18

    値を直接割り当てたり、定数として格納したりする代わりに、長いビットシフトを使用することが一部のプログラマーの慣例であるのはなぜですか

  19. 19

    CSSフィールドスタイルを使用して、ビューフィールドをグリッドの水平方向に中央揃えにする方法

  20. 20

    CSSフィールドスタイルを使用して、ビューフィールドをグリッドの水平方向に中央揃えにする方法

  21. 21

    ブレードビューで先行ゼロを使用して数値をフォーマットする

  22. 22

    Cでビットフィールドを設定/反転する方法

  23. 23

    ビットフィールドを介してcharのビットにアクセスする

  24. 24

    32ビット整数を配列バッファに格納する方法は?

  25. 25

    Matlabで匿名fncを使用するときに、値を配列に格納してプロットする方法

  26. 26

    ビットコードを使用してopenSSLをビルドする

  27. 27

    KartikのFileInputウィジェットを使用してYii2Frameworkで97.66KBを超えるファイルをアップロードできない

  28. 28

    C#コードからSQLServerに格納されているビット単位のコード値を決定する方法

  29. 29

    Windowsビルドサーバーでローカルパッケージを使用してドットネットビルドする方法

ホットタグ

アーカイブ