需要将Perl解包转换为内联::C AV*
我正在努力将Perl需要将Perl解包转换为内联::C AV*,perl,inline-c,Perl,Inline C,我正在努力将Perl解包转换为内联::C @array = unpack("C*", $buf); 这就是我目前所拥有的,但我是一名内联::C新手,因此我很难下一步做什么: STRLEN len; char* test = SvPVbyte(buf, len); ... AV* arr = SvRV(?); 有人能提供一个如何做这件事的提示吗?这里最明智的做法可能是避免调用unpack,而做unpack会做的事情,这更简单 STRLEN len; char *str = SvPVbyte(b
解包转换为内联::C
@array = unpack("C*", $buf);
这就是我目前所拥有的,但我是一名内联::C新手,因此我很难下一步做什么:
STRLEN len;
char* test = SvPVbyte(buf, len);
...
AV* arr = SvRV(?);
有人能提供一个如何做这件事的提示吗?这里最明智的做法可能是避免调用unpack
,而做unpack
会做的事情,这更简单
STRLEN len;
char *str = SvPVbyte(buf, len);
AV *arr = newAV();
char *ptr;
for (ptr = str; ptr < str + len ; ptr++) {
SV *char_value = newSViv(*ptr);
av_push(arr, char_value);
}
strlenlen;
char*str=SvPVbyte(buf,len);
AV*arr=newAV();
char*ptr;
对于(ptr=str;ptr
或者,当然,如果不需要,只需编写循环并省略数组即可:)函数体可以如下所示:
STRLEN len;
char* buf;
AV* av = newAV();
SvGETMAGIC(sv);
buf = SvPVbyte(sv, len);
while (len--)
av_push(av, newSViv(*(buf++)));
返回值有两种选择
SV* my_unpack(SV* sv) {
...
return newRV_noinc(av); // Will get mortalized by typemap.
}
或
AV* my_unpack(SV* sv) {
...
return sv_2mortal(av); // Typemap will create a reference.
}