在php中等效的memcpy

时间:2012-12-19 04:58:41

标签: php memcpy

我想通过PHP在网络上发送UDP消息。 该消息具有预定义的协议,例如消息必须是10个字节长,其中前3个字节用于条目1,2个字节用于条目2,3个字节用于条目3,最后2个字节用于条目4。

我怎样才能在PHP中执行此操作? 与在C中一样,我们可以使用memcpy。

3 个答案:

答案 0 :(得分:1)

只需创建所需字节的字符串即可。字符串的字符是PHP中的一个字节。

答案 1 :(得分:0)

我真的希望在PHP中有一个快速的方法来做到这一点!所有PHP字符串函数 返回一个字符串,而不是允许您直接复制到现有字符串。 如果你有兆字节,后者在内存方面非常有用 - 大小的数组。以下代码是我希望的那种东西的PHP变种... 如果你可以直接在PHP中作为本机进行这种操作,那将是很好的 函数调用而不是必须进行自己的扩展。在下面, $ source是一个短字符串,我们想复制一部分数据 更长的字符串$目的地。我们通过引用传递后者,所以我们没有 通过执行函数调用来浪费内存。

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];
    }
}

答案 2 :(得分:0)

这很接近。

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

请注意,与C不同,PHP管理内存& realloc for you,你不能溢出:p我不认为你可以在userland中做一个精确的memcpy克隆,你可以抛出一些例外/ trigger_error()如果$ n> strlen($ src)或$ n> strlen($ dest)ofc。如果需要的话,上面的代码会自动为你重新命名$ dest,而不像C&C的memcpy。