Good day!
How i can return packed data into perl script?
For example:
#include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h"
MODULE = Mytest PACKAGE = Mytest
SV* getnum(char *number, int l) INIT: AV* array; int cccc,r,g,b; double y; CODE: int n = 0; int c=0; int cc=0; int ccc=0; array = newAV(); double data[768], akf[768]; while (n < l-256) { c++; if (c==1) { r=abs((int)number[n]); // printf("c - %d r - %d\n",c,r); } if (c==2) { // g=abs((int)number[n]); // printf("c - %d g - %d\n",c,g); } if (c==3) { cc++; // b=abs((int)number[n]); // printf("c - %d b - %d\n",c,b); c=0; y=r; if(cc%768!=0){ data[cc]=y; } if (cc%768==0){ data[cc]=y; int tau,i,j; int summ; for (tau=0; tau<768-1; tau++){ double sum=0; for (i=0; i<768-tau; i++) { sum+= data[i]*data[i+tau]; } sum /= (768-tau); akf[tau]=sum; } for (j=4; j<768-4; j++){ if (akf[j]>akf[j-1] && akf[j]>akf[j+1] && akf[j]>akf[j-2] && akf[j]>akf[j+2] && akf[j]>akf[j-3] && akf[j]>akf[j+3] && akf[j]>akf[j-4] && akf[j]>akf[j+4] ){ ccc++; } } av_push(array, newSVnv(ccc)); cc=0; ccc=0; } } n++; }
RETVAL = newRV_noinc((SV*)array); OUTPUT: RETVAL
will returned me array of dec. numbers:
#!/usr/bin/perl -w
use strict; use warnings; use ExtUtils::testlib; use Mytest; use Data::Dumper; use Glib qw(FALSE TRUE); use Gtk2 -init;
my($x,$criteria,@a,@res,$pix,$cc,$button,@m,$img,$pixbuf,$pixels,$w,$h,$c);
die "Usage: $0 imagefile\n" unless @ARGV; $pixbuf = Gtk2::Gdk::Pixbuf->new_from_file ($ARGV[0]); $pixels = $pixbuf->get_pixels(); #$pixels="\x00\x00\xf0\x00\x00\xff\x00\x00\xff"; my $dim=1; # print Dumper(Mytest::getnum($pixels,length ($pixels))),"\n";
my $txt=Mytest::getnum($pixels,length ($pixels)); foreach(@{$txt}){ # do{$criteria+=$_; } if $_ =~m/^\d+$/; # print "scalar data $_", length ($_) ,"\n" unless $_ =~m!^\d+$!; } print "$criteria\n"; # print "end akf ",qx[date];
But i need in last element in array *char data, i.e. packed (pack "C*") data.
Or some value with length = length $pixels () (i.e. return in *.pl copy of *number).
Thanks!
Dmitriy