解决方案 »

  1.   

    为什么不先用unpack返回一个16位的short型,在利用得到的值format进字符串.
      

  2.   

    关键是发回的数据是一个整体,咋个unpack返回一个16位的short型,你只用一个unpack("s",$buf);肯定是不对的啥,所以我只想取那一块的内存,就是找不到类似于memcpy的函数啊.
      

  3.   

    比如现在你得到的串是PHPHPHPHPH
    unpack("s","PHPHPHPHPH");返回的是整个串的前两个字节,即'PH'的对应的short型,你不是就是要这个么?
      

  4.   

    $bytesOfLength = 2;$length = bin2hex(substr($data,0,$bytesOfLength));
    $content = substr($data,$bytesOfLength);
      

  5.   

    这个肯定不行啥,s代表一个数字.打个比方,服务器发给我的字符串为5abcde,其中5代表的是紧接着的字符串的长度,我接收到数据时解析s对应前面的数字,a对应字符串,所以unpack('sa5',$buf);这样解析就对了啥,但是这里的5必须是在先知道这个字符串前面的那个short值时才行.这感觉有点矛盾一样.不知道我说清楚没.
      

  6.   

    这样子,你是否能做一组供测试的数据,就是类似你现在从服务器端获取到的字符串.
    比如5abcde,现在把这个5变成你实际接收到的数据.
    光说好像的确说不太清楚呀..
      

  7.   

    二进制数据 用 ASCII 数字表示长度?
    这是什么设计? 我还是第一次见...
      

  8.   

    分2步走就是了。例如数据收在$buff里,长度占4字节的空间:
    $len=array_shift(unpack("L",substr($buff,0,4)));
    $data=unpack("sa{$len}",substr($buff,4));
      

  9.   

    呵,问题已解决,也得谢谢楼上的了.我正因为当初不知道substr可以直接截取二进制数据.