Byte[] in C# kürzen?

4 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.

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?

Hawara123 
Beitragsersteller
 11.05.2017, 12:25

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

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