note
BrowserUk
<blockquote><i>I need a dynamic number of bytes incoming, without having to change the underlying C code,</i></blockquote>
<p>I'm not quite sure why you think you cannot pass variable length strings in scalars?
<P>Also, whilst [pack] is one way to encode unsigned bytes into strings, it is not the only way:<code>
#! perl -slw
use strict;
use Inline C => Config => BUILD_NOISY => 1;
use Inline C => <<'END_C', NAME => '_1180095', CLEAN_AFTER_BUILD =>0;
int doStuff( SV *sv ) {
STRLEN len, i;
unsigned char *bytes = SvPVx( sv, len );
printf( "%d : ", len );
// print the hi & lo nybbles, of the unsigned bytes passed, in hex
for( i=0; i < len; ++i ) {
printf( "%01x %01x\t", ( bytes[ i ] & 0xf0 ) >> 4, bytes[ i ] & 0x0f );
}
printf( "\n" );
return 1;
}
END_C
doStuff( "\x0f\xf0\xaa\x55\x01\x80" );
doStuff( join '', map chr, 0x00 .. 0xff );
doStuff( pack 'C*', 1 .. 10 );
</code>
<P>Output:<code>
C:\test>1180095.pl
6 : 0 f f 0 a a 5 5 0 1 8 0
256 : 0 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 a 0 b 0 c 0 d 0 e 0 f 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 a 1 b 1 c 1 d 1 e 1 f 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 2 a 2 b 2 c 2 d 2 e 2 f 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 3 a 3 b 3 c 3 d 3 e 3 f 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4 a 4 b 4 c 4 d 4 e 4 f 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 5 a 5 b 5 c 5 d 5 e 5 f 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 6 a 6 b 6 c 6 d 6 e 6 f 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 7 a 7 b 7 c 7 d 7 e 7 f 8 0 8 1 8 2 8 3 8 4 8 5 8 6 8 7 8 8 8 9 8 a 8 b 8 c 8 d 8 e 8 f 9 0 9 1 9 2 9 3 9 4 9 5 9 6 9 7 9 8 9 9 9 a 9 b 9 c 9 d 9 e 9 f a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 a a a b a c a d a e a f b 0 b 1 b 2 b 3 b 4 b 5 b 6 b 7 b 8 b 9 b a b b b c b d b e b f c 0 c 1 c 2 c 3 c 4 c 5 c 6 c 7 c 8 c 9 c a c b c c c d c e c f d 0 d 1 d 2 d 3 d 4 d 5 d 6 d 7 d 8 d 9 d a d b d c d d d e d f e 0 e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 e a e b e c e d e e e f f 0 f 1 f 2 f 3 f 4 f 5 f 6 f 7 f 8 f 9 f a f b f c f d f e f f
10 : 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 a
C:\test>
</code>
<div class="pmsig"><div class="pmsig-171588">
<hr />
<font size=1 >
<div>With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'</div>
<div>Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.</div>
<div>"Science is about questioning the status quo. Questioning authority". [http://www.theregister.co.uk/2016/11/02/complexity_in_it/|The enemy of (IT) success is complexity.]</div>
<div>In the absence of evidence, opinion is indistinguishable from prejudice. </div>
</font>
</div></div>
1180088
1180095