2

POSシステムのドキュメントを読んで、どの席が選択されているかを知らせるマスクの例を次に示します。私はこれを理解することはできません。ビットマスキングを完全に理解しています。この例は間違っていますか?

関数

このシステム変数は、シート フィルター マスクを含む 8 文字の文字列です。

種類・サイズ

A8

構文

@フィルターマスク

Filter_mask の使用法

このシステム変数は読み取り専用です。

Filter_mask の例

以下は、フィルタ マスクの例です。

80000000 - seat 1 is active (@filter_active ="Y")
00000001 - seat 32 is active (@filter_active = "Y")
50A00000 - seats 2,4,9 and 11 are active (@filter_active = "Y")
00000000 - filter inactive, no seats
4

4 に答える 4

2

これらは 8 桁の 16 進数で、32 桁の 2 進数を格納できます。

(16^8 = 2^32 = 4,294,967,296)

バイナリ表現では、各桁が座席に対応します。

   hex               binary
80000000 = 10000000000000000000000000000000
00000001 = 00000000000000000000000000000001
50a00000 = 01010000101000000000000000000000
00000000 = 00000000000000000000000000000000

最初のバイナリ ビットは座席番号 1 用で、最後のバイナリ ビットは座席番号 32 用です。彼らはあなたに 8 文字の文字列を与えているので、マスキング演算を行うためにおそらくそれを 32 ビット値に解析したいと思うでしょう。ターゲット言語で「hex string to integer」を探すと、次のようなものが見つかります。

Pythonで16進文字列をintに変換する

注: Google は、( "0x50a00000 in binary" )のようなものを見ているときに、すぐに基数変換を行うことができますが、Wolfram Alpha はもう少し多くのことを行います:

http://www.wolframalpha.com/examples/NumberBases.html

于 2011-06-07T19:52:47.140 に答える
2

各数字を一度に 1 つずつ 4 ビット 2 進数に変換します。

80000000 -> 1000 0000 ....
50A00000 -> 0101 0000 1010 ...
于 2011-06-07T19:43:54.423 に答える
1

マスクは次のとおりです。

Seat 1: 0x80000000
Seat 2: 0x40000000
Seat 3: 0x20000000
Seat 4: 0x10000000
Seat 5: 0x08000000
...
Seat 31:0x00000002
Seat 32:0x00000001

またはより一般的:

mask = 1 << (32 - seatno)

例:

0x50A00000 = 0x40000000 | 0x10000000 | 0x00800000 | 0x00200000

したがって、座席2、4、9、および11です。

于 2011-06-07T19:46:30.713 に答える
1

例は正しいようです。最上位ビットと最下位ビットを逆にして、ビット位置に 1 ベースのインデックスを使用しました (データを 4 バイトの 16 進数ではなく ASCII で保持することは別として)。したがって、ビットnが設定されている場合 (LSB はビット #0、または値00000001)、座席番号が取得されます31-n+1

于 2011-06-07T19:41:36.877 に答える