Ein Byte-Array auf einen bestimmten Wert initialisieren, der nicht der Standardwert null ist?

Ich bin damit beschäftigt, ein altes Projekt, das in C++ durchgeführt wurde, in C# umzuschreiben.

Meine Aufgabe ist es, das Programm neu zu schreiben, so dass es so nah wie möglich an das Original funktioniert.

Der vorherige Entwickler, der das Programm geschrieben hat, erstellt während der Dateiverarbeitung eine Struktur mit einer Vielzahl von Feldern, die dem Format entsprechen, in dem eine Datei geschrieben werden muss.

Diese Felder sind alle Byte-Arrays. Der C++-Code verwendet dann memset, um diese gesamte Struktur auf alle Leerzeichen (0x20) zu setzen. Eine Zeile Code. Einfach.

Dies ist sehr wichtig, da das Dienstprogramm, an das die Datei letztendlich geht, die Datei in diesem Format erwartet. Ich musste diese Struktur in eine Klasse in C# umwandeln, aber ich kann keine Möglichkeit finden, jedes dieser Byte-Arrays einfach auf alle Leerzeichen zu initialisieren.

Was I've am Ende mit zu tun ist dies in der Klasse Konstruktor:

//Initialize all of the variables to spaces.
int index = 0;
foreach (byte b in UserCode)
{
    UserCode[index] = 0x20;
    index++;
}

Dies funktioniert gut, aber ich bin sicher, dass es einen einfacheren Weg, dies zu tun sein muss. Wenn das Array im Konstruktor auf "UserCode = new byte[6]" gesetzt wird, wird das Byte-Array automatisch mit den Standardwerten Null initialisiert. Gibt es keine Möglichkeit, dass ich es bei der Deklaration in Leerzeichen umwandeln kann, so dass es beim Aufruf des Konstruktors meiner Klasse sofort so initialisiert wird? Oder eine memset-ähnliche Funktion?

Verwenden Sie dies, um das Array überhaupt erst zu erstellen:

byte[] array = Enumerable.Repeat((byte)0x20, ).ToArray();

Ersetzen Sie `` durch die gewünschte Array-Größe.

Kommentare (7)

Sie können Enumerable.Repeat() verwenden.

Array mit 100 Elementen, initialisiert auf 0x20:

byte[] arr1 = Enumerable.Repeat(0x20,100).ToArray();
Kommentare (4)

Sie können einen collection initializer verwenden:

UserCode = new byte[]{0x20,0x20,0x20,0x20,0x20,0x20};

Dies funktioniert besser als Repeat, wenn die Werte nicht identisch sind.

Kommentare (2)