更新しました:
私はいくつかのデータ構造を持っています。それがどのような構造で、値がどのように格納されているかについての情報はありませんが、数値の配列 (整数) を含める必要があります
バイト (10 進数):
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 ) | $byte1;
$res=($res << 8 ) | $byte2;
$res=($res << 8 ) | $byte3;
$res=($res << 8 ) | $byte4;
その後、正しい結果 5981 が得られます。これは他の値でも機能しますが、余分なバイトが表示される場合を除いて、194 または 195 のいずれかです。
余分なバイトが 194 の場合、それを無視しても結果は正しくなりますが、195 の場合、結果は間違っています。
194,195 バイトは何に使用されますか?
問題が解決しました!
バイトは文字列として保存され、読み取り中に間違ったエンコーディングが使用されました。
生の文字列を ISO-8859-1 に変換し、それをバイトに分割し (194,195 は表示されません)、単純に逆の順序で 4 バイトずつ読み取りました。
ポールRに感謝します