--- Prabhu Gurumurthy <[EMAIL PROTECTED]> wrote:
> Hi All,
>
> I have a C program which i want to convert it into perl
> In the C program it is given like this
>
> typedef unsigned short u_int16;
> #define dataLen 4
> #define keyLen 52
> #define userkeyLen 8
> #define DataT(v) u_int16 v [dataLen]
> #define keyT(v) u_int16 v [keyLen]
> #define UserKeyT(v) u_int16 v [userKeyLen]
>
> void function(DataT(dataIn), DataT(dataOut), keyT(key));
>
> how can i convert the above lines into perl scripts,
Prabhu,
Without seeing more of the program, it would be difficult to tell you how to convert
it. A good
first test, when trying to convert C to Perl is to run the C through the C
preprocessor. With
gcc, you can do this:
gcc -E someprog.c > someprog.txt
Then, at the bottom of the someprog.txt file is your actual program, after the
preprocessor has
done its work. Your code above generates the following:
typedef unsigned short u_int16;
void function(u_int16 dataIn [4], u_int16 dataOut [4], u_int16 key [52]);
My C is a bit (well, a lot) rusty, but it appears that you are defined u_int16 as a
new type
definition of unsigned short. That means that you are passing function() three arrays
of unsigned
shorts (hmmm... that sounded a bit odd). By specifying a length for the array, you're
setting
aside that amount of memory (I think). Since the function is void, it's not returning
anything.
I seem to recall that passing arrays like that in C will actually be passing a
reference to said
array, so any effect that function is going to have outside of itself is going to
modify the
passed arguments directly. Anyone with better knowledge of C than myself, feel free
to speak up!
To achieve a similar effect in Perl, you'd pass in arrays by reference:
function( \@dataIn, \@dataOut, \@key );
sub function {
my ($dataIn, $dataOut, $key) = @_;
...
}
The three scalars in function() are actually array references and changing them will
change the
called arrays.
> i thought that getting
> the datalen from the input would solve the problem but how to get the
> datalen of that variable in PERL?
To get the length of any scalar in Perl, use the length function.
$ perl -e '$x="abcde";print length $x'
5
> Also is there a way that i can convert the datalen into binary format
> is yes how?
What do you mean "binary format"? See perldoc for 'pack' and 'unpack'. Also, go to
http://www.perlmonks.org, type "Super Search" in the box in the upper left corner and
start
searching for examples people have posted. Chapter 3 in Programming Perl also has more
information about how to do this.
> This is second question:
>
> I know that if i want to XOR two data
> then i have to use "^"
> I have a PERL script which is like this
>
> print "Enter number: ";
> chomp($number = <STDIN>);
> print "Enter another number: ";
> chomp($num = <STDIN>);
>
> $value = $number ^ $num;
> print "the value is $value\n;
>
> is there any mistake in the above script
Looks fine to me:
$ perl -e "print 5^2"
7
$ perl -e "print 4^2"
6
$ perl -e "print 3^2"
1
Cheers,
Curtis "Ovid" Poe
=====
"Ovid" on http://www.perlmonks.org/
Someone asked me how to count to 10 in Perl:
push@A,$_ for reverse q.e...q.n.;for(@A){$_=unpack(q|c|,$_);@a=split//;
shift@a;shift@a if $a[$[]eq$[;$_=join q||,@a};print $_,$/for reverse @A
__________________________________________________
Do You Yahoo!?
Check out Yahoo! Shopping and Yahoo! Auctions for all of
your unique holiday gifts! Buy at http://shopping.yahoo.com
or bid at http://auctions.yahoo.com
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]