2012-06-30 71 views
1

我將FMS和PHP一起使用,我需要客戶端ID才能斷開某個用戶的連接。因此,我從FMS中檢索客戶端ID,但FMS將該ID作爲long int發送,如4702111234508538223將長整型轉換爲PHP中的字符串

這是我的問題;我需要在PHP中將此號碼轉換爲oAACAAAA之類的內容。有沒有簡短的方式或某種圖書館存在這樣做?否則,我必須將this AS3 library轉換爲PHP。

+0

@Jared你不會碰巧知道PHP如何在內部存儲整數類型? – Bojangles

+0

@JamWaffles - 抱歉,無法通話;腳在嘴裏。我的想法是,沒有辦法解決這個問題,但我發現不同的情況似乎是這樣。 –

+0

我發現問題在於Adobe在他們的耳朵之間有磚頭。他們*如何到達那裏? –

回答

2

該函數將像"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; 
} 
2

你可以使用任何BC MathGMP 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));