Byte[] in C# kürzen?

5 Antworten

Ein Einzeiler dafür wäre

byte[] oldArray = new byte[] { 1, 2, 6, 2, 1, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

byte[] newArray = String.Join(" ", oldArray).Replace(" 0", "").Replace("0 ", "").Split(' ').Select(s => Convert.ToByte(s, 16)).ToArray();

Das würde anhand deines alten byte[] ein neues byte[] erstellen in dem alle nullen entfernt sind (egal an welcher Stelle)

MFG xGlumi

Woher ich das weiß:eigene Erfahrung – Programmier/IT Erfahrung seit 2009 (Freizeit und Beruf)

Hawara123 
Beitragsersteller
 23.05.2017, 18:29

ich habe schon eine anderwertige Lösung, aber dass schaut ganz Interessant aus, danke für den Tipp, vielleicht brauche ich es später nochmal, oder ändere es um.

0

Mit einer for oder foreach Schleife durch das array gehen und wenn eine 0 gefunden wird durch eine erneute Schleife gehen die den Rest des Arrays eine Position nach hinten schiebt damit keine Lücken entstehen.

ungefähr so (nicht getestet):

for (int i=0; i<bytes.Length(); i++) {

if (bytes[i] == 0) {

for (int j=i; j<bytes.Length()-1; j++) {

bytes[j] = bytes[j+1];

}}


markusb0815  11.05.2017, 12:28

es könnte auch vorher eine 0 stehen.
Ein Array könnte so aussehen {1,0,1,2,6,3,0,0,0,0}

Und dann?

0
Hawara123 
Beitragsersteller
 11.05.2017, 12:25

okay mit schleifen, ich dachte es gibt noch irgendeine schon von c# gegebene Funktion dafür...

0

Das Sinnvollste wäre natürlich, den Array durch eine List<Byte> zu ersetzen.

Ansonsten musst du den Array durch ein neues Objekt vom Typ Byte[] ersetzen - am einfachsten wohl, indem du es erst dimensionierst und dan mit der CopyTo-Methode des alten Arrays füllst; danach alterArray=null; oder alterArray=neuerArray; neuerArray=null;.

Du hast Die Größe bei der Deklaration doch festgelegt. Damit ist die Entscheidung gefallen.

Ansonsten solltest Du einfach eine andere Datenstruktur nehmen!

Du solltest schon wissen was Du willst als Programmierer...