* 请教: 这几个简单的C++赋值,怎么翻译成PHP语言 ?

konfyt 2010-03-29 03:02:50
在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的?
...全文
126 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
foolbirdflyfirst 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 konfyt 的回复:]

有个数组, 23个
$test[23];
然后他的每个元素值等于= "A18FC-S8235-18BD1-3";

现在怎么调用getchksum呢? 我直接传递 #test过去不对
[/Quote]
问题是你想怎么处理?遍历数组对每个元素进行checksum?
xuzuning 2010-03-29
  • 打赏
  • 举报
回复
http://www.chimehost.com/forum/php/14651-converting-c-checksum-function-php.html 这个也面中的php代码是错误的,不是上面c代码的原义
c代码将输入数据作为短整型值运算,而php代码将输入数据作为长整型值运算
konfyt 2010-03-29
  • 打赏
  • 举报
回复
有个数组, 23个
$test[23];
然后他的每个元素值等于= "A18FC-S8235-18BD1-3";

现在怎么调用getchksum呢? 我直接传递 #test过去不对


konfyt 2010-03-29
  • 打赏
  • 举报
回复

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;
}


konfyt 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bing19870624 的回复:]
引用 5 楼 konfyt 的回复:
http://www.chimehost.com/forum/php/14651-converting-c-checksum-function-php.html

这个网页有个, 但是不知道里面为什么好多***

替换成空格就行了
function getchksum($data) {
//return the chksum of the dat……
[/Quote]

我用他计算结果不正确
餅餅 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 konfyt 的回复:]
http://www.chimehost.com/forum/php/14651-converting-c-checksum-function-php.html

这个网页有个, 但是不知道里面为什么好多***
[/Quote]
替换成空格就行了
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;
}
foolbirdflyfirst 2010-03-29
  • 打赏
  • 举报
回复
哦,不用改,晕掉了,c代码里很多*也是没用的...
foolbirdflyfirst 2010-03-29
  • 打赏
  • 举报
回复
厄..
$temp = $chksum>>16;//这一行貌似要乘等于
改成
$temp *= $chksum >> 16;

foolbirdflyfirst 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 konfyt 的回复:]

http://www.chimehost.com/forum/php/14651-converting-c-checksum-function-php.html

这个网页有个, 但是不知道里面为什么好多***
[/Quote]

呵呵,难得你能搜到这个,看了一下,那些*一个都没用,把它们全部替换掉,*在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...");
konfyt 2010-03-29
  • 打赏
  • 举报
回复
http://www.chimehost.com/forum/php/14651-converting-c-checksum-function-php.html

这个网页有个, 但是不知道里面为什么好多***
konfyt 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 foolbirdflyfirst 的回复:]
PHP code

$c = 0xFA;
if( $c < 200 )
{
echo sprintf("%04x",$c);
}



C++实在是不熟悉,不过google一下好象有php实现的。
你试试看
http://www.phpclasses.org/browse/package/5144.html
[/Quote]

我昨天搜索到了这个, 但是他写的乱七八糟, 没看懂.

谢谢你了!
foolbirdflyfirst 2010-03-29
  • 打赏
  • 举报
回复

$c = 0xFA;
if( $c < 200 )
{
echo sprintf("%04x",$c);
}


C++实在是不熟悉,不过google一下好象有php实现的。
你试试看
http://www.phpclasses.org/browse/package/5144.html
konfyt 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 foolbirdflyfirst 的回复:]
1.php打印数组用的是print_r函数,或者var_dump也行
2.$serial{7} = $md5_user{5}
3.$newSerial = substr($serial,0,12).dechex($count);
$serial = $newSerial;
[/Quote]

谢谢!
第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);
}

foolbirdflyfirst 2010-03-29
  • 打赏
  • 举报
回复
1.php打印数组用的是print_r函数,或者var_dump也行
2.$serial{7} = $md5_user{5}
3.$newSerial = substr($serial,0,12).dechex($count);
$serial = $newSerial;

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧