人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

こんにちは。

WindowsCE5.0で動作するアプリをVC#を使って開発しています。

このアプリで、ICタグにデータを書き込むのですが、書き込むデータを変数に格納する際に
どうしてもビットフィールドを使いたいのです。

いろいろ調べていたら、C#ではビットフィールドが使えないようなことが書いて
あったのですが、なにか代替する方法はありますでしょうか。

要は、やりたいことは、1バイトのデータを5ビット+3ビットのように分割して扱いたいのです。

C#ではできない場合、VBではできますでしょうか?その場合はどのようにすればVBで
ビットフィールドが使えるのでしょうか?

よろしくお願いいたします。

●質問者: inu
●カテゴリ:コンピュータ
✍キーワード:C# ICタグ VB VC こんにちは
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● hijk05
●27ポイント

>要は、やりたいことは、1バイトのデータを5ビット+3ビットのように分割して扱いたいのです。

整数型変数に格納して、自前で分割すればよいですが・・・。


2 ● ardarim
●27ポイント

論理演算子を使って手計算で分割/結合すればよいと思います。大して難しいということもありません。


dataがバイトデータだとすると、

上位5ビットは hi = (data >> 3) & 0x1F

下位3ビットは lo = (data & 0x07)

で得られます。


結合する場合は、

data = (hi << 3) | lo

です。

より厳密にしたければ

data = ((hi & 0x1F) << 3) | (lo & 0x07)


3 ● oden
●26ポイント

Flags属性を利用しましょう。

下記のような形で利用できます。


class Program

{

[System.Flags]

enum BitField : byte

{

Empty = 0,

LF1 = 1,

LF2 = 2,

LF3 = 4,

LF4 = 8,

LF5 = 16,

LFMAX = 31,

HF1 = 32,

HF2 = 64,

HF3 = 128,

HFMAX = 224,

}

static void Main(string[] args)

{// LF1とHF2以外のフラグを立てたfieldを作成

BitField field = ~BitField.LF1 & ~BitField.HF2;

if (BitField.LF2.Equals(field & BitField.LF2))

{// LF2フラグが立つ場合、fieldに含まれるLFフラグを表示

System.Console.WriteLine(field & BitField.LFMAX);

}

}

}

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ