Frage

Gibt es etwas ähnliches in C # sprintf()?

I würde beispielsweise wie ein Integer in eine 2-Byte-Byte-Array zu konvertieren.

So etwas wie:

int number = 17;
byte[] s = sprintf("%2c", number);
War es hilfreich?

Lösung 3

Es stellte sich heraus, dass das, was ich wirklich wollte, war:

short number = 17;
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
writer.Write(number);
writer.Flush();

Der Schlüssel hier ist die Write-Funktion der Klasse Binary. Es hat 18 Überlastungen, verschiedene Formate zu einem Byte-Array umzuwandeln, die es in den Stream schreibt. In meinem Fall habe ich die Nummer, die ich schreiben möchte sicherstellen, dass in kurzer Datentyp gehalten, dies wird die Write-Funktion write 2 Byte machen.

Andere Tipps

string s = string.Format("{0:00}", number)

Der erste 0 bedeutet "das erste Argument" (d.h.e Zahl); die 00 nach dem Doppelpunkt ist die Formatangabe (2 Ziffern).

Beachten Sie jedoch, dass die .NET-Strings sind UTF-16, so dass eine 2-Zeichenkette ist 4 Bytes, nicht 2

(edit: Frage von string zu byte[] geändert)

Um das Bytes, die Verwendung Encoding zu erhalten:

byte[] raw = Encoding.UTF8.GetBytes(s);

(offensichtlich unterschiedliche Kodierungen zu unterschiedlichen Ergebnissen führen können; UTF8 2 Bytes für diese Daten geben wird)

Eigentlich eine kürzere Version des ersten Bits ist:

string s = number.ToString("00");

Aber die string.Format Version ist flexibler.

EDIT: (. Überprüfen Marcs Antwort auf die letztere) Ich gehe davon aus, dass Sie den Wert einer ganzen Zahl in ein Byte-Array und nicht der Wert umgewandelt in einen String und dann in ein Byte-Array konvertieren möchten

Um ein int in ein Byte-Array konvertieren Sie verwenden können:

byte[] array = BitConverter.GetBytes(17);

, aber das wird Ihnen eine Reihe von 4 Bytes und nicht 2 (da ein int 32 Bit ist.) Um ein Array von 2 Bytes bekommen sollten Sie verwenden:

byte[] array = BitConverter.GetBytes((short)17);

Wenn Sie wollen einfach nur den Wert 17 auf zwei Zeichen dann konvertieren verwenden:

string result = string.Format("{0:00}", 17);

Aber wie Marc wies auf die 4 Bytes verbrauchen, da jedes Zeichen in .NET 2 Bytes (UTF-16) (einschließlich der zwei Bytes, die die String-Länge hält sie 6 Bytes).

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