Erik Tews: Aus Binärwert Integer machen

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

  1. 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

    1. 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