unpack
PerlをInline::Cに変換するのに少し苦労しています
@array = unpack("C*", $buf);
これは私がこれまでに持っているものですが、私はInline :: 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);
}
または、もちろん、ループを記述して、必要がない場合は配列を省略します:)
関数の本体は次のようになります。
STRLEN len;
char* buf;
AV* av = newAV();
SvGETMAGIC(sv);
buf = SvPVbyte(sv, len);
while (len--)
av_push(av, newSViv(*(buf++)));
戻り値には2つの選択肢があります。
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.
}