我正在将 C# 函数复制到 PHP。在 C# 中,GUID、DateTime 和布尔值被转换为字节。接下来,字节数组被合并和编码。最后一步是将其转换为 base64。
字节数组存在以下部分:
GUID: 16 bytes
Timestamp: 8 bytes
Boolean: 1 byte
在 php 中,我已经转换了 base64 并将字符串解码回字节。我还设法将前 16 个字节转换为 GUID。我验证了 PHP 返回给我的字节,它们是正确的。
现在我将 8 个字节转换为 PHP 中的时间戳。到目前为止,我没有运气。我想问题是它返回一个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-2011 09:54:56。
PHP
在 PHP 中,我设法获得了 8 个字节的十六进制:
$bin = pack("C*", 119, 23, 124, 173, 103, 143, 206, 136);
$hex = unpack("H*", $bin);
接下来我该怎么办?我已经尝试了一些转换方法,但我似乎从来没有得到正确的答案。
附加信息:
这8个字节分别是:119、23、124、173、103、143、206、136
十六进制字符串为:77177cad678fce88
我应该得到的日期时间:23-12-2011 09:54:56
php -r '回显 PHP_INT_MAX;' 返回 9223372036854775807
C# 应用程序不在我的权限范围内,所以我不能保证我可以更改它