Ich möchte eine Zeichenfolge in ein Byte-Array einfügen, aber die Zeichenfolge könnte zu groß sein, um zu passen. In dem Fall, in dem es zu groß ist, möchte ich so viel wie möglich in das Array einfügen. Gibt es eine effiziente Möglichkeit herauszufinden, wie viele Zeichen passen?
Sie sollten die Encoding-Klasse verwenden, um die Konvertierung in das richtige Byte-Array durchzuführen? Alle Encoding-Objekte verfügen über eine überschriebene Methode GetMaxCharCount, die Ihnen "die maximale Anzahl von Zeichen, die durch das Decodieren der angegebenen Anzahl von Byte erzeugt wird" gibt. Sie sollten diesen Wert verwenden können, um Ihre Zeichenfolge zu trimmen und richtig zu codieren.
Effizient wäre es, herauszufinden, wieviel (pessimistisch) Bytes Sie pro Zeichen mit
benötigen %Vor%Dann dividiere die String-Größe durch das Ergebnis und konvertiere dann so viele Zeichen mit
%Vor%Wenn Sie weniger Speicher verwenden möchten, verwenden Sie
%Vor%aber das ist eine viel langsamere Methode.
Die Encoding-Klasse in .NET hat eine Methode namens GetByteCount
, die eine Zeichenkette oder char [] aufnehmen kann. Wenn Sie 1 Zeichen übergeben, wird Ihnen angezeigt, wie viele Bytes für dieses 1 Zeichen in welcher Kodierung Sie benötigen.
Die Methode GetMaxByteCount
ist schneller, aber sie führt eine Worst-Case-Berechnung durch, die eine höhere Zahl zurückgeben könnte, als tatsächlich benötigt wird.
Cooke, dein Code tut nicht das, was du anscheinend glaubst. Die Vorbelegung des Byte-Puffers in Ihrem Fall ist reine Verschwendung, da sie nicht verwendet wird. Ihre Zuweisung löscht stattdessen den zugewiesenen Speicher und setzt den Verweis arr
so zurück, dass er auf einen anderen Puffer zeigt, weil Encoding.GetBytes
ein neues Array zurückgibt.