Ich habe versucht, ein nicht null beendetes Char-Array in eine Datei auszugeben.
Tatsächlich, ich empfange Pakete und drucke dann ihre Felder.
Nun, da diese Felder nicht null-terminiert sind, z. B. ein Datensegment, das eine Größe von 512 hat, aber möglicherweise nicht vollständig belegt ist.
Wenn ich diese Daten in eine Datei schreibe, verwende ich einfach & lt; & lt; Überladene Funktion, die nichts über tatsächliche Daten weiß und nur nach der Beendigung des Datensegments sucht.
Also, wie kann ich der Ausgabefunktion mitteilen, dass nur so viel spezifische Anzahl von Bytes geschrieben wird?
Anstatt etwas zu verwenden, das jedes Mal teuer zu nennen ist:
%Vor% Wenn Sie maxbytes
bytes eingeben möchten, verwenden Sie write
method
Wenn Sie weniger Bytes im Puffer haben können, woher wissen Sie, wieviele davon Ihr Puffer enthält? Wenn '%code%'
das Pufferende markiert, können Sie Folgendes schreiben:
Eine billige Lösung wäre, einen Puffer zu haben, der Platz für ein zusätzliches Null-Zeichen hat, und einfach ein Nullzeichen an dem Punkt zu setzen, an dem Sie die tatsächliche Größe kennen und dann den Null-terminierten Puffer ausgeben, wie Sie es bereits tun. Schnell und zuverlässig.
Dies funktioniert, ist aber nicht sicher gegen das versehentliche Aufrufen der standardmäßigen char*
-Version von operator<<
:
Dies ist sicherer, wenn Sie einen maxw
-Typ verwenden, der die Länge der nächsten char*
-Ausgabe begrenzt:
Wenn Sie das letzte Byte nicht interessieren, können Sie einfach
%Vor%und dann füttern Puffer zu welcher gewünschten String-Funktion. Wenn es kürzer ist, wird alles auf den Null-Terminator laufen, der bereits existiert , und wenn es keinen Terminator gab, wird es zu dem laufen, den Sie gerade erstellt haben.
Und es ist schnell:)