我正在尝试解码一个所谓的十六进制字符串。在MS SQL Server (11.0.2100)中,数据的类型为char(8)
.
在手册中没有明确的解码数据的方法,但它记录了它包含的内容:
给定一个十六进制字符串,即。
0001003F
长度为4。低字节在右边,高字节在左边。对于 4 个“bytes
”中的每一个,都给出了一个将“位”映射到某个真实值的参考表。还给出了位顺序,其中位 0 或最右边的位是第 1 位,...,等等。
该表如下所示:
第一个“字节”:
|Bit Order | Description | 1 | 0 | trigger |
|-----------|---------------|-------------------|-------------------|---------------|
|BIT0 | state foo | state foo is ON | State foo is OFF | high level |
|BIT1 | state bar | in state bar | not in state bar | high level |
| ...
|BIT7 | state bazz | in state bazz | not in state bazz | high level |
(接下来的 3 个其他“字节”还有 3 个表格......,每个 4 个“字节”应该有 8 个相等数量的“位”)
我认为解码这些数据的方法是将十六进制字符串分成 4 部分并将它们转换为二进制字符串,宽度固定为 8。
在PHP
中,以十六进制 ' 0001003F
' 为例,第一个字节是 ' 3F
',已转换为二进制,0011 1111
(为清楚起见有空格)。然后,推断出第一个字节的值是:
'state foo is on', 'in state bar', ..., 'not in state bazz'
.
我也尝试过这样做:hex2bin("0001003F")
但它输出strin(4) " # "
.
这是解码这些数据的正确方法吗?
(如果标签不正确,请见谅。)