我想在 PHP 中通过网络发送 UDP 消息。消息有一个预定义的协议,即消息必须为 10 个字节长,其中前 3 个字节用于条目 1,2 个字节用于条目 2,3 个字节用于条目 3,最后 2 个字节用于条目 4。
我怎样才能在 PHP 中做到这一点?在 C 中,我们可以使用 memcpy。
只需创建所需字节的字符串。字符串的一个字符在 PHP 中是一个字节。
我真的希望在 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];
}
}
这很接近。
function &memcpy(&$dest,$src,$n){
$dest=substr($src,0,$n) . substr($dest,$n);
return $dest;
}
请注意,与 C 不同,PHP 为您管理内存和重新分配,并且您不能溢出:pi 不认为您可以在用户空间中进行精确的 memcpy 克隆,您可能会抛出一些异常 / trigger_error() if $n > strlen( $src) 或 $n>strlen($dest) ofc。与 C 的 memcpy 不同,如果需要,上面的代码会自动为您重新定义 $dest。