更新:
我有一些数据结构。我没有信息它是什么结构以及如何存储值,但它应该包含数值的数组(整数)
字节(十进制):
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
更正/更新:
使用前8个字节(0 20 13 4 25 0 0 0)存储日期(创建记录时) 2013-4-25 0:0:0
值以相反的顺序存储在4个字节中,因此最后4个字节93 23 0 0应为0 0 23 93,然后我们可以移位和OR:
$ 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
答案 0 :(得分:0)
这只是一个转变和OR:
result = (byte_2 << 8) | byte_1;
您更容易看到是否以十六进制查看值:
byte1 = 01011101 = 93 = 0x5d
byte2 = 00010111 = 23 = 0x17
result = 1011101011101 = 5981 = 0x175d