【发布时间】:2016-11-14 03:07:58
【问题描述】:
我正在尝试解码一个所谓的十六进制字符串。在 MS SQL Server (11.0.2100) 中,数据的类型为 char(8)。
在手册中没有明确的解码数据的方法,但它记录了它包含的内容:
给定一个十六进制字符串,即。
0001003F,长度为4。低字节 在右边,高字节在左边。对于 4 个中的每一个 'bytes' 一个将“位”映射到某个真值的参考表 被赋予了价值。位顺序也给出了位 0 或位 最右边是第一位,...等
表格如下所示:
第一个“字节”:
|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) " # "。
这是解码这些数据的正确方法吗?
(如果标签不正确,请见谅。)
【问题讨论】: