更新:
我有一些数据结构。我不知道它是什么结构以及如何存储值,但它应该包含数值数组(整数)
字节(十进制):
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