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);
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).