有一个问题请教
我做了一个CRC校验,输入必须是"\xAA\xBB\x10\x03\x00\x00\x00\x00\x0F\x00\x00\x00\x00\x00"
如何把字符串"AABB1003000000000F0000000000"转换成上面的格式?

解决方案 »

  1.   

    function strtest(){
            $string = 'AABB1003000000000F0000000000';
            $start = 0;
            $strlen = strlen($string);
            $len = 2;
            while ($strlen) {
                $array[] = substr($string,$start,$len);
                $string = substr($string, $len, $strlen);
                $strlen = strlen($string);
            }
            $pre = "\x";
            $data = '';
            foreach( $array AS $val ){
                    $data .= $pre.$val;
            }
            var_dump($data);
        }
      

  2.   

    $s = "AABB1003000000000F0000000000";
    $a = '\x' . join('\x', str_split($s, 2)); //'\xAA\xBB\x10\x03\x00\x00\x00\x00\x0F\x00\x00\x00\x00\x00'
    但是,这只与 "\xAA\xBB\x10\x03\x00\x00\x00\x00\x0F\x00\x00\x00\x00\x00" 形式上是相同的,值并不同
    在 代码中书写的 "\xAA\xBB\x10\x03\x00\x00\x00\x00\x0F\x00\x00\x00\x00\x00" 将被转换成二进制串,书面上的只是他的值
    你可能需要的是 $b = pack('H*', $s);
      

  3.   


    $s = 'AABB1003000000000F0000000000';
    echo '\x'.join('\x',str_split($s,2));
    //\xAA\xBB\x10\x03\x00\x00\x00\x00\x0F\x00\x00\x00\x00\x00