我將FMS和PHP一起使用,我需要客戶端ID才能斷開某個用戶的連接。因此,我從FMS中檢索客戶端ID,但FMS將該ID作爲long int發送,如4702111234508538223
。將長整型轉換爲PHP中的字符串
這是我的問題;我需要在PHP中將此號碼轉換爲oAACAAAA
之類的內容。有沒有簡短的方式或某種圖書館存在這樣做?否則,我必須將this AS3 library轉換爲PHP。
我將FMS和PHP一起使用,我需要客戶端ID才能斷開某個用戶的連接。因此,我從FMS中檢索客戶端ID,但FMS將該ID作爲long int發送,如4702111234508538223
。將長整型轉換爲PHP中的字符串
這是我的問題;我需要在PHP中將此號碼轉換爲oAACAAAA
之類的內容。有沒有簡短的方式或某種圖書館存在這樣做?否則,我必須將this AS3 library轉換爲PHP。
該函數將像"4702111234525315439"
成類似"oAADAAAA"
:
function convert_id_to_str($id)
{
if (strspn($id, '') != strlen($id)) {
return false;
}
$str = '';
if (PHP_INT_SIZE >= 8) {
while ($id) {
$str .= chr($id & 255);
$id >>= 8;
}
} else {
while ($id) {
$str .= chr(bcmod($id, '256'));
$id = bcdiv($id, '256', 0);
}
}
return $str;
}
你可以使用任何BC Math或GMP PHP功能,以確保處理32位和64位PHP能夠服務器上的64位數字,然後pack
結果格式化的字符串,例如:
$id = "4702111234508538223";
$hi = bcdiv($id, pow(2, 32));
$lo = bcsub($id, bcmul($hi, pow(2, 32)));
var_dump(pack("LL", $lo, $hi));
返回string(8) "oAACAAAA"
。 代碼是爆炸,但也可以很容易地轉向單線或功能。使用一個大數目擴展的保證與32位平臺,但如果兼容性你確信這個平臺託管你的PHP解釋器有64位的能力,你可以只使用
pack("LL", $id, $id/pow(2, 32));
@Jared你不會碰巧知道PHP如何在內部存儲整數類型? – Bojangles
@JamWaffles - 抱歉,無法通話;腳在嘴裏。我的想法是,沒有辦法解決這個問題,但我發現不同的情況似乎是這樣。 –
我發現問題在於Adobe在他們的耳朵之間有磚頭。他們*如何到達那裏? –