Aus Binärwert Integer machen
Erik Tews
- perl
0 Tom
Hi
Ich suche eine Perl-Funtkion, die mir aus einem 4 Byte Binärwort, oder eine IP in der Form 24.54.25.64 einen Integer machen kann. Kennt wer so eine Funktion?
Ich brauche auch noch eine Funktion, mit der ich so einen Integer-Wert wieder zurückkonvertieren kann.
In C gibt es da glaube ich inet_ntoa
Hallo Erik
Die Umwandlung von Binärwerten (oder anderen binären Datenstrukturen) in Perl-Skalare erfolgt über die pack()/unpack()-Funktion.
Mit unpack("C",sunstr($IPValue,0,1)) erhälst Du das 1. Byte,
mit unpack("C",sunstr($IPValue,1,1)) das 2. Byte,
mit unpack("C",sunstr($IPValue,2,1)) das 3. Byte und
mit unpack("C",sunstr($IPValue,3,1)) das 4. Byte.
Dabei bedeutet das "C", das der binäre Wert als "unsigned char" interpretiert werden soll.
Mehr Infos im Manual unter perlfunc -> pack().
Grüsse
Tom
Hallo Tom und Erik,
Mit unpack("C",sunstr($IPValue,0,1)) erhälst Du das 1. Byte,
mit unpack("C",sunstr($IPValue,1,1)) das 2. Byte,
mit unpack("C",sunstr($IPValue,2,1)) das 3. Byte und
mit unpack("C",sunstr($IPValue,3,1)) das 4. Byte.
Man kann aber auch noch ein bisschen komprimieren ... mal abgesehen davon, daß man an Stelle eines Sonnenstring wohl eher einen Unterstring (substring) haben möchte ;-)
mit unpack("C*", $IPValue) erhält man eine Liste der Bytes. Möchte man nicht den ganzen String sondern beispielsweise nur 4 Zeichen gewandelt haben kann man aber auch den * durch eine Zahl (4) ersetzen.
Möchte man aber alles in eine einzige Zahl bekommen (so habe ich Erik zumindest verstanden), kann man den String auch als Long interpretieren.
unpack("L", $IPValue) hat das höchstwertige Byte am Ende und
unpack("N", $IPValue) hat das höchstwertige Byte am Anfang des Strings
Jörk