2008/01/07

Endianess conversion

Endianness maybe a pain in the ass if you don't know it, and you have to work on multi platforms like Linux x86 and Solaris Sparc.

And here is a tip ( quick hack, quit easy ) to convert the endianness .


[vuhung@soltest01 perl]$od -x useable.dat |head
0000000 7561 6d69 2800 0b00 0100 0000 0100 0100
0000020 6400 6700 6197 7155 90a4 c065 3e49 0000
0000040 dd6d 0000 0404 3501 0000 0040 0103 0100
0000060 0200 0000 0100 0100 6400 6800 6197 7155
0000100 90a4 c065 3e49 0000 dd6d 0000 0404 3401
0000120 0000 0040 0103 0100 0300 0000 0100 0100
0000140 6400 6900 d925 5d15 2429 7019 f824 0100
0000160 74b7 0100 0404 3401 0000 0000 0103 0100
0000200 0400 0000 0100 0100 6400 6a00 7709 5805
0000220 4a0a 5d06 e093 0400 d0dd 0600 0404 3501
[vuhung@soltest01 perl]$od -x useable.dat.big | head
0000000 6175 696d 0028 000b 0001 0000 0001 0001
0000020 0064 0067 9761 5571 a490 65c0 493e 0000
0000040 6ddd 0000 0404 0135 0000 4000 0301 0001
0000060 0002 0000 0001 0001 0064 0068 9761 5571
0000100 a490 65c0 493e 0000 6ddd 0000 0404 0134
0000120 0000 4000 0301 0001 0003 0000 0001 0001
0000140 0064 0069 25d9 155d 2924 1970 24f8 0001
0000160 b774 0001 0404 0134 0000 0000 0301 0001
0000200 0004 0000 0001 0001 0064 006a 0977 0558
0000220 0a4a 065d 93e0 0004 ddd0 0006 0404 0135
[vuhung@soltest01 perl]$cat endian-convert.pl
#!/usr/local/bin/perl

($ifile, $ofile) = @ARGV;

open(IN, "$ifile");
open(OUT,">$ofile");
while(read(IN,$buf,2)){
$buf = unpack("n",$buf);
$buf = pack("v",$buf);
print OUT $buf;
}
[vuhung@soltest01 perl]$

0 件のコメント: