2012-12-19 99 views
1

我想通過PHP中的網絡發送UDP消息。 該消息具有預定義的協議,即消息必須是10個字節長,其中前3個字節用於條目1,2個字節用於條目2,3個字節用於條目3,並且最後2個字節用於條目4.在php中等價於memcpy

我該如何在PHP中做到這一點?如在C中,我們可以使用memcpy。

+0

簡單地重複使用數組將會做什麼? –

+0

你能舉個例子嗎? –

回答

1

只需創建一個所需字節的字符串。字符串的字符是PHP中的一個字節。

+0

但消息包含不同的類型,如intergers,字符串等,例如我想爲條目2插入一個整數值,這是2個字節長,整數值是1207(4字節,因爲字符串的字符是字節在PHP中) –

0

我真的希望有一種快速的方式來做到這一點在PHP中!所有PHP字符串函數 都會返回一個字符串,而不是直接複製到現有字符串中。 如果你有兆字節 - 大小的數組,從內存的角度來看後者是非常有用的。下面的代碼是我想要的那種PHP變體... 如果你可以直接在PHP中作爲本地 函數調用,而不是必須製作自己的擴展,那麼這將會很不錯。在下面, $ source是一個很短的字符串,我們希望複製 更長的字符串$ destination中的部分數據。我們通過引用傳遞後者,所以我們不通過執行函數調用來浪費內存。

function charCopy($source, &$destination, $start, $length) 
{ 
    $endk = intval($length - 1); 
    $end = intval($start + $endk); 
    $start = intval($start); 
    for($j = $end, $k = $endk; $j >= $start; $j--, $k--) { 
     $destination[$j] = $source[$k]; 
    } 
} 
0

這很接近。

function &memcpy(&$dest,$src,$n){ 
$dest=substr($src,0,$n) . substr($dest,$n); 
return $dest; 
} 

注意,與C,PHP管理內存&的realloc給你,你可以不溢出:PI不認爲你可以在用戶態的精確克隆的memcpy,你可以拋出一些異常/ trigger_error( )如果$ n> strlen($ src)或$ n> strlen($ dest)ofc。如果需要,上面的代碼將自動爲您重新設置$ dest,與C的memcpy不同。