C#関数をPHPにコピーしています。C#では、GUID、DateTime、およびブール値がバイトに変換されます。次に、バイト配列がマージされてエンコードされます。最後のステップは、これをbase64に変換することです。
バイトの配列は、次の部分で構成されています。
GUID: 16 bytes
Timestamp: 8 bytes
Boolean: 1 byte
PHPでは、すでにbase64を変換し、文字列をバイトにデコードしました。また、最初の16バイトをGUIDに変換することもできました。PHPが返したバイトを検証しましたが、それらは正しいです。
現在、PHPで8バイトをタイムスタンプに変換しています。今のところ運がありません。問題は、int64を返すという事実だと思います。
C#
これは、C#バイト配列から日時への変換です。
public DateTime Timestamp;
......
byte[] timestamp_bytes = new byte[8];
input.Read(timestamp_bytes, 0, 8);
Timestamp = DateTime.FromBinary(System.BitConverter.ToInt64(timestamp_bytes, 0));
そしてこれはC#の日時からバイト配列への変換です:
public DateTime Timestamp;
......
byte[] timestamp_bytes = System.BitConverter.GetBytes(Timestamp.ToBinary());
Timestamp.ToString()を出力すると、どちらの場合も23-12-201109:54:56になります。
PHP
PHPでは、8バイトの16進数を取得できました。
$bin = pack("C*", 119, 23, 124, 173, 103, 143, 206, 136);
$hex = unpack("H*", $bin);
次に何をすればいいですか?私はすでにいくつかの変換方法を試しましたが、正しい答えが得られないようです。
追加情報:
8バイトは次のとおりです:119、23、124、173、103、143、206、136
hexstringは次のとおりです:77177cad678fce88
私が取得する必要がある日時:23-12-2011 09:54:56
php -r'echo PHP_INT_MAX;' 9223372036854775807を返します
C#アプリは私の権限下にないため、変更できることを保証できません