本帖最后由 xiongmzh 于 2010-11-01 16:35:13 编辑

解决方案 »

  1.   

    825831985是可变的,由我的time变化而变化,但是我的time经过sprintf一格式化,传给C++就走了样,我知道一定是这个sprintf引起的,我一直对这个函数不感冒,琢磨了很久还是用得不对兄台给指点指点
      

  2.   

    怎么pack的,就怎么unpack。你的问题和sprintf有关系么?
    $format = sprintf("vvvva%dVa8", 10); //格式化字符串
    $head_data = pack(//封装包
                    $format,
                    0xFFAA,
                    0xFFAA,
                    6,
                    10,
                    11,
                    1,
                    1291046400);
    //你确认对方是按照你的pack格式反解的吗?
    print_r($t = unpack('v4v/a10a/VV/a8time/',$head_data));
    echo "<br/>";
    echo $t['time'].'00';
      

  3.   

    鉴于time()是10位数,pack的format关于时间戳的为什么是a8呢?这样不是会截断最后两位数么?
    为什么不是
    $format = sprintf("vvvva%dVa10", 10);
      

  4.   

    谢谢foolbirdflyfirst,“规则”是C++方面订的,我必须按照他的接收方式发包
    回头我试试改成a10
      

  5.   

    还是不行,对方接收到的还是和我的time不同,这里是把含有time这个包体通过socket传过去的郁闷啊