通过结果识别具有2个值的操作/功能

时间:2013-04-26 12:36:33

标签: types hex byte decimal bit-manipulation

更新:

我有一些数据结构。我没有信息它是什么结构以及如何存储值,但它应该包含数值的数组(整数)


字节(十进制):

0 20 13 4 25 0 0 0 54 0 0 0 195 145 23 0 0 195 146 23 0 0 195 168
23 0 0 24 24 0 0 195 168 23 0 0 195 169 23 0 0 116 23 0 0 195 146
23 0 0 195 169 23 0 0 194 186 23 0 0 195 168 23 0 0 24 24 0 0 194
163 23 0 0 116 23 0 0 195 169 23 0 0 195 145 23 0 0 195 146 23 0
0 195 168 23 0 0 0 24 0 0 195 146 23 0 0 194 186 23 0 0 194 186 23
0 0 194 163 23 0 0 194 186 23 0 0 117 23 0 0 46 23 0 0 93 23 0 0
24 24 0 0 23 24 0 0 23 24 0 0 70 24 0 0 0 23 0 0 23 23 0 0 23 23 0
0 47 23 0 0 70 23 0 0 0 23 0 0 116 23 0 0 23 23 0 0 94 23 0 0 46 23
0 0 116 23 0 0 195 146 23 0 0 0 23 0 0 70 23 0 0 93 23 0 0 70 23 0
0 116 23 0 0 194 186 23 0 0 70 22 0 0 70 22 0 0 46 23 0 0 70 23 0
0 93 23 0 0


存储值(不带分号):

6098; 6120; 6168; 6120; 6121; 6004; 6098; 6121; 6074; 6120; 6168; 6051; 6004;
6121; 6097; 6098; 6120; 6144; 6098; 6074; 6074; 6051; 6074; 6005; 5934; 5981;
6168; 6167; 6167; 6214; 5888; 5911; 5911; 5935; 5958; 5888; 6004; 5911; 5982;
5934; 6004; 6098; 5888; 5958; 5981; 5958; 6004; 6074; 5702; 5702; 5934; 5958;
5981


更正/更新:

  1. 使用前8个字节(0 20 13 4 25 0 0 0)存储日期(创建记录时) 2013-4-25 0:0:0

  2. 值以相反的顺序存储在4个字节中,因此最后4个字节93 23 0 0应为0 0 23 93,然后我们可以移位和OR:

  3.   

    $ RES = 0;
      $ res =($ res<< 8)| $字节1;
      $ res =($ res<< 8)| $字节2;
      $ res =($ res<< 8)| $字节3;
      $ res =($ res<< 8)| $字节4;

    然后我们得到正确的结果5981,这也适用于其他值,除了出现额外字节的一些情况,它是194或195

      

    如果额外字节是194并且我们忽略它,结果仍然是正确的,但如果它是195,那么结果是错误的。

    用于?

    的194,195字节是什么?


    问题解决了!

    字节存储为字符串,在读取过程中使用了错误的编码 将原始字符串转换为ISO-8859-1,然后将其拆分为字节(未出现194,195),然后按相反顺序读取4个字节。


    特别感谢Paul R

1 个答案:

答案 0 :(得分:0)

这只是一个转变和OR:

result = (byte_2 << 8) | byte_1;

您更容易看到是否以十六进制查看值:

byte1 =       01011101 =   93 =   0x5d
byte2 =       00010111 =   23 =   0x17
result = 1011101011101 = 5981 = 0x175d