in reply to Re: Is this a sane/safe way to pass an aref into a C function? (XS<Perl)
in thread Is this a sane/safe way to pass an aref into a C function?
Thanks tye, that's great!
I was trying similar things, but did not realize pack was required. This is far easier and less error-prone as you said (as well it saves me from having to wrap one C function with another as this way, I can pass the data directly to the original function), but I am thankful that I was able to learn how to pass in perl variables into a C function, even though I'm going to revert to using this method instead:
use warnings; use strict; use feature 'say'; use Inline 'C'; my @b = (1..3, 253..255); my $x = pack "V0C*", @b; check($x, length($x)); __END__ __C__ #include <stdio.h> #include <stdint.h> void check(unsigned char* n, int len){ int i; for(i=0; i<len; i++){ printf("%d\n", n[i]); } }
Output:
1 2 3 253 254 255
Of course, in the real code, I perform error checking.
In Section
Seekers of Perl Wisdom