Это один и тот же результат, просто интерпретируется по-разному:
0x94643B85 = 2489596805 (unsigned 32-bit integer)
0x94643B85 = -1805370491 (signed 32-bit integer)
Причина, по которой вы видите отрицательное значение на 64-битном компьютере, заключается в том, что вы интерпретируете этот результат как 32-битное целое со знаком.
Если вы действительно хотите перейти между двумя интерпретациями, я думаю, вам придется сделать это самостоятельно. Простой способ сделать это будет примерно так:
<?php
function toSigned($value) {
if ($value <= 2147483647)
return $value;
return $value - 4294967295 + 1;
}
function toUnsigned($value) {
if ($value >= 0)
return $value;
return $value + 4294967295 - 1;
}