协议的要求如下:
字段名     字节数 类型           描述
Total_Length 4 Unsigned Integer 消息总长度(含消息头及消息体)
Command_Id 2 Unsigned Short 命令类型
                                                0x0001表示更新操作
                                                0x0002表示资源下载
                                                0x8000表示错误返回
URL_Length 1 Unsigned Char 备用URL的长度
URL           URL_Length String 备用URL地址,注意用UTF-8编码
Version          1 Unsigned Char 版本号 目前是0x01跟据以上的要求,我应该怎么写数据流,然后生成一个二进制流文件?现在没有一点门路,谢谢!

解决方案 »

  1.   

    用header()声明输出类型为二进制流下面要输出内容可以直接用 echo 
      

  2.   

    整形转化成 2二进制 可以用  base_convert
    $str = 0x8000;echo $str2 = base_convert($str, 16, 2);
    echo '<br>';
    echo base_convert($str2, 2, 16);
    [code]字符串 文件等 可以考虑用 pack 和 unpack 转化成二进制[code=PHP]
    $file1 = 'F:/46.gif';           //随便拷一个图片作为测试用
    $file2 = 'F:/test.txt';         //生成的二进制流保存在这个文件里
    $file3 = 'F:/47.gif';           //由二进制流还原成的文件$size = filesize($file1);echo '文件大小为:'.$size;
    echo "\n<br>转化为二进制 ...";$content = file_get_contents($file1);
    $content = bstr2bin($content);
    $fp = fopen($file2, 'w');
    fwrite($fp, $content);
    fclose($fp);$size2 = filesize($file2);echo '转化成二进制后文件大小为:'.$size2;$content = bin2bstr($content);$fp = fopen($file3, 'w');
    fwrite($fp, $content);
    fclose($fp);
    function bin2bstr($input)
    // Convert a binary expression (e.g., "100111") into a binary-string
    {
      if (!is_string($input)) return null; // Sanity check  // Pack into a string
      $input = str_split($input, 4);
      $str = '';
      foreach ($input as $v)
      {
       $str .= base_convert($v, 2, 16);
      }
      
      $str =  pack('H*', $str);
      
      return $str;
    }function bstr2bin($input)
    // Binary representation of a binary-string
    {
      if (!is_string($input)) return null; // Sanity check  // Unpack as a hexadecimal string
      $value = unpack('H*', $input);
      
      // Output binary representation
      $value = str_split($value[1], 1);
      $bin = '';
      foreach ($value as $v)
      {
       $b = str_pad(base_convert($v, 16, 2), 4, '0', STR_PAD_LEFT);
      
       $bin .= $b;
      }
      
      return $bin;
    }