Was ist der einfachste Weg, eine in eine binäre Zeichenfolge in Perl hinzuzufügen?

StackOverflow https://stackoverflow.com/questions/222043

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe eine Variable, die eine 4-Byte, um Netzwerk-IPv4-Adresse enthält (dies wurde unter Verwendung von Packung und die Ganzzahl-Darstellung erzeugt). Ich habe eine andere Variable, auch eine 4-Byte-Netzwerk Ordnung, Subnetz. Ich versuche, sie zusammen fügen und fügen Sie eine die erste IP im Subnetz zu erhalten.

die ASCII-Darstellung zu erhalten, kann ich inet_ntoa($ip&$netmask) die Basisadresse zu erhalten, aber es ist ein Fehler inet_ntoa((($ip&$netmask)+1) zu tun; Ich erhalte eine Meldung wie:

 Argument "\n\r&\0" isn't numeric in addition (+) at test.pm line 95.

Also, was passiert, die am besten als ich sagen kann, ist es bei dem 4 Bytes suchen, und zu sehen, dass das 4 Bytes, keine Ziffernfolge darstellen und dann 1 hinzufügen verweigern.

Eine andere Art, es auszudrücken: Was ich will, ist 1 zu dem niedrigstwertigen Byte tun hinzufügen, was ich weiß, dass das vierte Byte ist? Das heißt, ich will die Zeichenfolge \n\r&\0 nehmen und mit dem String \n\r&\1 enden. Was ist der einfachste Weg, dies zu tun?

Gibt es eine Möglichkeit, dies zu tun, ohne die Variable zu auspacken und wieder einpacken?

War es hilfreich?

Lösung

Was passiert, ist, dass Sie einen Byte-String mit $ip&$netmask machen, und dann versuchen, es als eine Zahl zu behandeln. Das wird nicht funktionieren, als solche. Was müssen Sie inet_ntoa füttern ist.

pack("N", unpack("N", $ip&$netmask) + 1)

Ich glaube nicht, dass es ein einfacherer Weg, es zu tun.

Andere Tipps

Verwirrende Zahlen und Strings. Vielleicht ist der folgende Code wird helfen:

use Socket;

$ip = pack("C4", 192,168,250,66); # why not inet_aton("192.168.250.66")
$netmask = pack("C4", 255,255,255,0);

$ipi = unpack("N", $ip);
$netmaski = unpack("N", $netmask);

$ip1 = pack("N", ($ipi&$netmaski)+1);
print inet_ntoa($ip1), "\n";

Welche Ausgänge:

192.168.250.1
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top