位掩码问题
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
这些是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的确实有点多:
示例似乎是正确的。他们只是反转了最重要的和最不重要的位,并且使用了一个基于1的位索引(除了将数据保存为ASCII而不是4字节的十六进制数据外)。所以,如果位n
被设置(LSB是位#0,或值00000001
),您可以获得座位号码31-n+1
。
我还没有看到'80000000'是'1' – trutheality 2011-06-07 19:44:03
只是写在二进制 – Vlad 2011-06-07 19:46:06
我知道一些人非常执着于保持他们的数据可读性。所以(可能)而不是每字节256个值,编写规范的人选择每个字节(0-f)有16个值,并且它们可能表示为直接的ASCII值。 – vhallac 2011-06-07 19:50:12
将每个数字中的每个数字一次转换为4位二进制。
80000000 -> 1000 0000 ....
50A00000 -> 0101 0000 1010 ...
谢谢。这个逆转就是让我循环的东西。 – Bob 2011-06-07 19:52:47
你的面具有以下几种:
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。
的例子看起来是正确的,对我一贯的 - 它是什么,您有确切困难吗? MSB是座位1,LSB是座位32. – 2011-06-07 19:39:58
或者我不明白位掩码。你能解释80000000如何转换为座位1吗? – Bob 2011-06-07 19:43:44
每次将每个数字转换为4位二进制。 – 2011-06-07 19:45:09