我正在研究一种生成导入文件的方法,以便与第三方应用程序一起使用。该文件是纯文本和部分二进制文件。有人创建了一个document,它提供了一种将时间转换为二进制的高级方法。我承认,按位操作一直都在我的头上。下面是我生成文件二进制部分的函数,但我不知道这是否正确。
private function formatTime($time1) {
//$time should be float
$time = floatval($time1);
$time = $time + 2;
//Process byte 4 (which is the exponent)
//Mask out everything else
$byte4 = $time & bindec('01111111100000000000000000000000');
//Move to first 8 bits
$byte4 >>= 23;
//Multiple by 2
$byte4 <<= 1;
//$byte4 should be correct at this stage (but double check)
//Process byte 3 (this includes add "0" to bit 8)
$byte3 = $time & bindec('00000000011111110000000000000000');
$byte3 >>= 16;
//Process byte 2
$byte2 = $time & bindec('00000000000000001111111100000000');
$byte2 >>= 8;
//Process byte 1
$byte1 = $time & bindec('00000000000000000000000011111111');
//Put them together in correct order
$hytek = 0;
$hytek = $byte4 | ($byte3 << 8) | ($byte2 << 16) | ($byte1 << 24);
return pack('f',$hytek);
}
我引用的文档说要向指数添加2,所以我添加了2到$ time,但我不知道这是否正确。我也猜测打包结果。我很好奇的是,按位部分是否正确。
当我尝试导入生成的文件时,软件会识别文件的各个部分,但没有时间使用。