0

更新:

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


字节(十进制):

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:

$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

4

1 回答 1

0

这只是一个转变和 OR:

result = (byte_2 << 8) | byte_1;

如果您查看十六进制值,则更容易查看:

byte1 =       01011101 =   93 =   0x5d
byte2 =       00010111 =   23 =   0x17
result = 1011101011101 = 5981 = 0x175d
于 2013-04-26T12:41:17.653 回答