Lassen Sie uns sagen, dass ich eine binäre Datei, die wieWie kann ich ein unsigned int aus einer Binärdatei in Perl lesen?
[unsigned int(length of text)][text][unsigned int(length of text)][text][unsigned int(length of text)][text]
Und dieses Muster für die Datei zu wiederholen immer wieder nur formatiert ist. Wie lese ich das unsigned int und drucke es aus, gefolgt von dem Textblock in Perl?
Auch dies ist eine Binärdatei und keine einfache Textdatei.
Ihr Code geht davon aus, dass ein 'unsigned int' in C 4 Byte ist, was nicht der Fall ist (wie Sie sehen). Ein besserer Ansatz, um dieses Verwechseln zu vermeiden, besteht darin, die gesamte Datei einzulesen und dann zu verarbeiten, so dass Ihr Code einwandfrei funktioniert, wenn er jemals auf einer 16-Bit-Plattform ausgeführt wird, wobei "unsigned int" zwei Byte ist. –
Deshalb habe ich angegeben, dass ich 32 Bit angenommen habe. Ich stimme zu, dass das Einlesen in den Speicher eine gute und wohl eine bessere Lösung ist, aber wir wissen nicht, wie groß die Datei ist, die verarbeitet wird, oder wie viel Speicher auf dem Rechner verfügbar ist. Beide Lösungen haben Fallgruben. –
Chris, wie vermeidet das Lesen der gesamten Datei im Speicher die Verwendung der falschen Ganzzahl? –