Konverter Hex til Binary i Perl?

D

davyzhu

Guest
Hei alle,

Jeg vil skrive et perl-skript for å konvertere hex data til binær,
kommandoen kanskje "perl hex2bin.pl hex_file bin_file".

Eg The hex_file kan være:
1234
89ab

og konverteres bin_file vil være:
0001001000110100
1000100110101011

Er det mulig?Takk!

Davy

 
Jeg tror perl er ikke egnet for matematikk programmering.det formål å lette tekst programmering eller changing.for eksempel det er så bra å bruke perl for machim programmering (programmer som er produsert med datamaskinen selv)

 
mhamed wrote:

Jeg tror perl er ikke egnet for matematikk programmering.
det formål å lette tekst programmering eller changing.for eksempel det er så bra å bruke perl for machim programmering (programmer som er produsert med datamaskinen selv)
 
Det er en løsning på problemet som diskuteres på et annet forum.Ta en titt på diskusjonen her:

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

 
Hei alle,

Jeg har fullført det enkle perl-kode.

The Hex fil og bin filen i ASCII-modus.

Code:# Convert Hex fil til bin fil# Cmd modulen input output kontinuerlig endian

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

# ARGV [0] ARGV [1] ARGV [2] ARGV [3]# vanlig bruk

# Perl hex2bin.pl hex.f bin.f 0 1# åpne innspill hex fil

$ file = $ ARGV [0];

åpen (INF, $ fil) eller dienice ( "Åpne fil mislyktes \ n");

@ linjer = <inF>;

close (INF);# åpne utdata bin fil

åpen (output, "> $ ARGV [1]") eller dø "FEIL: Kan ikke åpne $ ARGV [1]. \ n";# default ikke kontinuerlig (1: kontinuerlig 0: med "\ n")

$ kontinuerlig = $ ARGV [2];# default Big Endian (1: Big Endian 0: Little Endian)

$ endian = $ ARGV [3];# konvertere hex til bin

foreach $ line (@ linjer) (

chomp $ linje;

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

foreach $ 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 bli erstattet av et mellomrom

else (

print OUTPUT "";

)

)

if ($ kontinuerlig == 0)

(print OUTPUT "\ n");

)# viser feilmelding (unyttig)

sub dienice (

my ($ errmsg) = @ _;

print "$ errmsg \ n";

exit;

)
 
Wow.Hva med dette?Gitt en verdi på $ linje du vil konvertere:

Code:

min% Konv = qw (0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9

10 B 11 C 12 D 13 E 14 F 15

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

map ($ num *= 16; $ num = $ Konv {$_};) split / /, $ linje;

 

Welcome to EDABoard.com

Sponsor

Back
Top