2011-06-07 169 views
2

Readng銷售點系統的文檔,這裏是他們給出的掩碼的示例,該掩碼應該告訴您選擇了哪些座位。我無法弄清楚這一點。我完全理解位掩碼。這個例子錯了嗎?位掩碼問題

功能

此係統變量是包含座濾波器掩模的八個字符的字符串。

類型/大小

A8

語法

@Filter_mask

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 
+1

的例子看起來是正確的,對我一貫的 - 它是什麼,您有確切困難嗎? MSB是座位1,LSB是座位32. – 2011-06-07 19:39:58

+0

或者我不明白位掩碼。你能解釋80000000如何轉換爲座位1嗎? – Bob 2011-06-07 19:43:44

+0

每次將每個數字轉換爲4位二進制。 – 2011-06-07 19:45:09

回答

2

這些是8位十六進制數字,它可以存儲多達32位二進制數字。

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

在二進制表示中,每個數字對應於座椅:

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

第一個二進制位是用於座椅#1,並且最後是座位#32。由於它們給了你一個8字符的字符串,你可能需要將它解析爲一個32位的值來做掩碼算術。尋找「十六進制字符串到整數」在目標語言,你會發現這樣的:

Convert hex string to int in Python

注:谷歌可以做基礎的轉換即興你,當你正在尋找的東西像這一點,如("0x50a00000 in binary"),但Wolfram Alpha的確實有點多:

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

1

示例似乎是正確的。他們只是反轉了最重要的和最不重要的位,並且使用了一個基於1的位索引(除了將數據保存爲ASCII而不是4字節的十六進制數據外)。所以,如果位n被設置(LSB是位#0,或值00000001),您可以獲得座位號碼31-n+1

+0

我還沒有看到'80000000'是'1' – trutheality 2011-06-07 19:44:03

+0

只是寫在二進制 – Vlad 2011-06-07 19:46:06

+0

我知道一些人非常執着於保持他們的數據可讀性。所以(可能)而不是每字節256個值,編寫規範的人選擇每個字節(0-f)有16個值,並且它們可能表示爲直接的ASCII值。 – vhallac 2011-06-07 19:50:12

2

將每個數字中的每個數字一次轉換爲4位二進制。

80000000 -> 1000 0000 .... 
50A00000 -> 0101 0000 1010 ... 
+0

謝謝。這個逆轉就是讓我循環的東西。 – Bob 2011-06-07 19:52:47

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。