php zend_parse_parameters有什么作用,PHP使用C语言开发扩展中:zend_parse_parameters方法接收二进制数据时取不到数据?...

PHP扩展开发中,有一个方法需要接收二进制数据,zend_parse_parameters设置参数类型为 “s”,打印参数的时候为空,看样子是没有接收到。

PHP_FUNCTION(hau_socket)

{

char *buf;

int len;

if( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "s", &buf, &len) == FAILURE ) {

return;

}

php_printf("str:%s, buf length:%d, len:%d\n", buf, strlen(buf), len); //这里的输出跟原来一样

PHPWRITE(buf,len); //这里输出了二进制数据,看起来是乱码,但我知道是输出了数据了!

}

<?php

$packet = new SocketPacket();//使用pack函数打包进制数据

$packet->WriteBegin( 0x7070 );

$packet->WriteInt_N( 0x1001 );

$packet->WriteInt_N( 1 );

$packet->WriteInt_N(9055249);

$packet->WriteEnd_n();

hau_socket( $packet->GetPacketBuffer() );

输出结果:str:, buf length:0, len:21

是否参数类型设置不对!?

php_printf那一行是不是少了个%d,最后的len没有打印出来。

然后,接收二进制数据你不应该也不能用strlen。

打印参数的时候为空是正常的,因为你传入的是二进制数据(有NULL)。

还有,如果你一定要打印二进制数据,应该用PHPWRITE(buf, len)。

看这里http://php.net/manual/pl/inte…

zend_parse_parameters

的使用上没有发现问题,并且你

printf

时也没有报空指针,说明

buf

确实被赋值了。我觉得你应该检查一下

$packet->GetPacketBuffer()

是否返回了一个字符串。

你先在php里

var_dump ($packet->GetPacketBuffer());

输出一下他的值吧,扩展部分没毛病。。

73bccf0c0b4af35beddca4274520fb45.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值