我正在连接到 Pervasive SQL 数据库,该数据库将一些数据拆分为两个字段。 DOUBLE 字段实际上分为 fieldName_1 和 fieldName_2,其中 _1 是 2 字节 int,_2 是 4 字节 int。
我想获取这些值并使用 PHP 将它们转换为可用值。
我有一些示例代码来进行转换,但它是用 Delphi 编写的,我不明白:
{ Reconstitutes a SmallInt and LongInt that form }
{ a Real into a double. }
Function EntConvertInts (Const Int2 : SmallInt;
Const Int4 : LongInt) : Double; StdCall;
Var
TheRealArray : Array [1..6] Of Char;
TheReal : Real;
Begin
Move (Int2, TheRealArray[1], 2);
Move (Int4, TheRealArray[3], 4);
Move (TheRealArray[1], TheReal, 6);
Result := TheReal;
End;
一些数据[字段名称_1,字段名称_2]
[132, 805306368] -> 这应该是 11
[132, 1073741824] -> 这应该是 12
我不太了解逻辑,无法将其移植到 PHP 中。非常感激任何的帮助。谢谢
编辑。
这是他们提供的 C 代码,显示符号/指数:
double real_to_double (real r)
/* takes Pascal real, return C double */
{
union doublearray da;
unsigned x;
x = r[0] & 0x00FF; /* Real biased exponent in x */
/* when exponent is 0, value is 0.0 */
if (x == 0)
da.d = 0.0;
else {
da.a[3] = ((x + 894) << 4) | /* adjust exponent bias */
(r[2] & 0x8000) | /* sign bit */
((r[2] & 0x7800) >> 11); /* begin significand */
da.a[2] = (r[2] << 5) | /* continue shifting significand */
(r[1] >> 11);
da.a[1] = (r[1] << 5) |
(r[0] >> 11);
da.a[0] = (r[0] & 0xFF00) << 5; /* mask real's exponent */
}
return da.d;
}