Konverter Hex til Binary i Perl?

D

davyzhu

Guest
Hej alle,

Jeg vil gerne skrive et perl script til at konvertere hex data for binære,
kommandoen måske "perl hex2bin.pl hex_file bin_file".

F.eks hex_file kan være:
1234
89ab

og den konverterede bin_file vil være:
0001001000110100
1000100110101011

Er det muligt?Tak!

Davy

 
Jeg tror, perl er ikke egnet til math programmering.det formål at lette tekst programmering eller changing.for eksempel at det er så god til at bruge perl for machim programmering (programmer, der er produceret med selve computeren)

 
mhamed wrote:

Jeg tror, perl er ikke egnet til math programmering.
det formål at lette tekst programmering eller changing.for eksempel at det er så god til at bruge perl for machim programmering (programmer, der er produceret med selve computeren)
 
Der er en løsning på dit problem drøftes på et andet forum.Tag et kig på den diskussion her:

http://www.issociate.de/board/post/143210/hex_to_binary_conversion.html

 
Hej alle,

Jeg har fuldstændig den simple perl-kode.

Den Hex fil og bin fil alle i ASCII mode.

Code:# Konverter Hex fil til bin fil# Cmd modul input output kontinuerlig endian

# Perl hex2bin.pl hex.f bin.f 0 / 1 0 / 1

# Argv [0] argv [1] argv [2] argv [3]# typisk brug

# Perl hex2bin.pl hex.f bin.f 0 1# åbne input hex fil

$ file = $ argv [0];

åben (inf, $ fil) eller dienice ( "fil åben mislykkedes \ n");

@ linjer = <inF>;

tæt (inf);# open output bin fil

åben (OUTPUT, "> $ argv [1]") or die "FEJL: Kan ikke åbne $ argv [1]. \ n";# standard ikke kontinuerlig (1: kontinuert 0: med "\ n")

$ kontinuerlig = $ argv [2];# standard big endian (1: big endian 0: Little Endian)

$ endian = $ argv [3];# convert hex til bin

foretrukne $ line (@ linjer) (

chomp $ linje;

@ tegn = split (//,$ linje);

foretrukne $ CHAR (@ tegn) (

if ($ CHAR eq "0") (

print OUTPUT "0000";

)

elsif ($ CHAR eq "1") (

($ endian == 1)

?

(print OUTPUT "0001")

:

(print OUTPUT "1000");

)

elsif ($ CHAR eq "2") (

($ endian == 1)

?

(print OUTPUT "0010")

:

(print OUTPUT "0100");

)

elsif ($ CHAR eq "3") (

($ endian == 1)

?

(print OUTPUT "0011")

:

(print OUTPUT "1100");

)

elsif ($ CHAR eq "4") (

($ endian == 1)

?

(print OUTPUT "0100")

:

(print OUTPUT "0010");

)

elsif ($ CHAR eq "5") (

($ endian == 1)

?

(print OUTPUT "0101")

:

(print OUTPUT "1010");

)

elsif ($ CHAR eq "6") (

print OUTPUT "0110";)

elsif ($ CHAR eq "7") (

($ endian == 1)

?

(print OUTPUT "0111")

:

(print OUTPUT "1110");

)

elsif ($ CHAR eq "8") (

($ endian == 1)

?

(print OUTPUT "1000")

:

(print OUTPUT "0001");

)

elsif ($ CHAR eq "9") (

print OUTPUT "1001";

)

elsif (($ CHAR eq "a") | | ($ CHAR eq "A")) (

($ endian == 1)

?

(print OUTPUT "1010")

:

(print OUTPUT "0101");

)

elsif ($ CHAR eq "b" | | $ CHAR eq "B") (

($ endian == 1)

?

(print OUTPUT "1011")

:

(print OUTPUT "1101");

)

elsif ($ CHAR eq "c" | | $ CHAR eq "C") (

($ endian == 1)

?

(print OUTPUT "1100")

:

(print OUTPUT "0011");

)

elsif ($ CHAR eq "d" | | $ CHAR eq "D") (

($ endian == 1)

?

(print OUTPUT "1101")

:

(print OUTPUT "1011");

)

elsif ($ CHAR eq "e" | | $ CHAR eq "E") (

($ endian == 1)

?

(print OUTPUT "1110")

:

(print OUTPUT "0111");

)

elsif ($ CHAR eq "f" | | $ CHAR eq "F") (

print OUTPUT "1111";

)

# andre charactor vil blive erstattet af et mellemrum

else (

print OUTPUT "";

)

)

if ($ kontinuerlig == 0)

(print OUTPUT "\ n");

)# viser fejlmeddelelse (ubrugelige)

sub dienice (

min ($ errmsg) = @ _;

print "$ errmsg \ n";

exit;

)
 
Wow.How about this?Have en værdi på $ linje du vil konvertere:

Code:

mine% conv = qw (0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9

en 10 B 11 C 12 D 13 E 14 f 15

A 10 B 11 C 12 D 13 E 14 F 15);min $ num = 0;

map ($ num *= 16; $ num = $ conv {$_};) split / /, $ line;

 

Welcome to EDABoard.com

Sponsor

Back
Top