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. |