在c++里面-------------------------------问题1---------------TCHAR szOldName[20];
TCHAR szname[20];
szname[0]= szOldName[1];
szname[1]= szOldName[2];
printf(szname); $szname[20];
$szname[0]= $szOldName[1];
$szname[1]= $szOldName[1];
echo($szname);
输出的是array , 我肯定理解错了, PHP的一个数组元素就带包了一个对象吧-------------------------------问题2---------------
$md5_user=MD5($szname);
$serial;
我现在想要 $serial的 第7位= $md5_user的第5位怎么做呢?------------------问题3-----------
$count = 30000;//$count 小于<0xFFFF
$serial 的 第12开始= $count 的16进制.(4个字符)
也就是这个怎么翻译成PHP的?

解决方案 »

  1.   

    1.php打印数组用的是print_r函数,或者var_dump也行
    2.$serial{7} = $md5_user{5} 
    3.$newSerial = substr($serial,0,12).dechex($count);
      $serial = $newSerial;
      

  2.   


    谢谢!
    第3个问题中, 如果 count <100, 也就是2位16进制, 如何在高位用0表示?
    比如 count= FA;
    strCount= "00FA"; 应该等于这种样式. 不足为用0表示.还加个问题: 
    PHP里面有checksum函数吗? 就是效验和, 我有个c++的, 可用到指针就不会翻译成PHP的了unsigned   short   in_cksum(unsigned   short   *addr,   int   len)   
    {   
    register   int   nleft   =   len;   
    register   unsigned   short   *w   =   addr;   
    register   int   sum   =   0;   
    unsigned   short   answer   =0;   
        
    while   (nleft   >   1)   
    {   
      sum   +=   *w++;   
      nleft   -=   2;   
    }   
    if   (nleft   ==   1)   
    {               
      *(unsigned   char   *)(&answer)   =   *(unsigned   char   *)w;   
      sum   +=   answer;   
    }   
    sum   =   (sum   >>   16)   +   (sum   &   0xffff);   
    sum   +=   (sum   >>   16);   
    answer   =   ~sum;   
    return(answer);   
    }
      

  3.   


    $c = 0xFA;
    if( $c < 200 )
    {
      echo sprintf("%04x",$c);
    }
    C++实在是不熟悉,不过google一下好象有php实现的。
    你试试看
    http://www.phpclasses.org/browse/package/5144.html
      

  4.   

    http://www.chimehost.com/forum/php/14651-converting-c-checksum-function-php.html这个网页有个, 但是不知道里面为什么好多***
      

  5.   


    呵呵,难得你能搜到这个,看了一下,那些*一个都没用,把它们全部替换掉,*在php语法里只表示相乘。php没有指针一说。function getchksum($data){
    //returnthechksumofthedata
    $chksum=0;
    $temp=0;
    for($e=0;$e<strlen($data)/4;$e+=4){
    $temp=unpack("V1a", substr($data, $e, 4));
    $temp=sprintf("%u",$temp['a']);
    //print("$temp+$chksum = " . ($temp+$chksum)."<br/>");
    $chksum=sprintf("%u", ($chksum+$temp)& 0xFFFFFFFF);
    }
    $temp = $chksum>>16;
    $temp = sprintf("%u", ($chksum+$temp) & 0xFFFF); return$temp;
    }echo getchksum("sending data...");
      

  6.   

    厄..
    $temp = $chksum>>16;//这一行貌似要乘等于
    改成
    $temp *= $chksum >> 16;
      

  7.   

    替换成空格就行了 
    function getchksum($data) {
      //return the chksum of the data
      $chksum = 0;
      $temp = 0;
      for($e=0;$e<strlen($data)/4;$e+=4) {
        $temp = unpack("V1a", substr($data, $e, 4));
        $temp = sprintf("%u",$temp['a']);
        //print("$temp + $chksum  =  " . ($temp+$chksum)."<br />");
        $chksum = sprintf("%u", ($chksum+$temp) &  0xFFFFFFFF);
      }
      $temp = $chksum>>16;
      $temp = sprintf("%u", ($chksum+$temp)  &  0xFFFF);
      
      return $temp;
    }
      

  8.   


    function getchksum($data) 
    {
    //return the chksum of the data
    $chksum = 0;
    $temp = 0;
    for($e=0; $e<count($data)/4; $e+=4) 
    {
    $temp = unpack("V1a", substr($data, $e, 4));
    $temp = sprintf("%u",$temp['a']);
    //print("$temp + $chksum  =  " . ($temp+$chksum)."<br />");
    $chksum = sprintf("%u", ($chksum+$temp) &  0xFFFFFFFF);
    }
    $temp = $chksum>>16;
    $temp = sprintf("%u", ($chksum+$temp)&0xFFFF);
    return $temp;
    }
      

  9.   

    有个数组, 23个
    $test[23];
    然后他的每个元素值等于= "A18FC-S8235-18BD1-3";现在怎么调用getchksum呢? 我直接传递 #test过去不对
      

  10.   

    http://www.chimehost.com/forum/php/14651-converting-c-checksum-function-php.html 这个也面中的php代码是错误的,不是上面c代码的原义
    c代码将输入数据作为短整型值运算,而php代码将输入数据作为长整型值运算
      

  11.   

    问题是你想怎么处理?遍历数组对每个元素进行checksum?