![]() |
SELFHTML Forumsarchiv |
|
|
Die folgende Nachricht zum Thema stammt von: Erik Tews, 30. 10. 1999, 17:01
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
Die folgende Nachricht zum Thema stammt von: Tom, 01. 11. 1999, 12:51
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
Die folgende Nachricht zum Thema stammt von: Jörk Behrends, 02. 11. 1999, 10:49
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
© 1998-2006
Impressum, Software: Classic Forum