Byte[] in C# kürzen?
Hey Leute, ich habe einen Byte[] (Byte[] bytes = new Byte[256];)
dieser wird dann ganz zufällig mit Zahlen gefüllt dass er am Ende zum Beispiel so aussieht [1,2,6,2,1,8,4,0,0,0,0,0,0,0,0,0,0,0, etc]
ich möchte den Byte[] jetzt kürzen damit nur noch: [1,2,6,2,1,8,4] drinnen steht. Wie funktioniert das.
ps: er kann nicht statisch sein, das es zufällig ist, wie viele befüllt werden.
5 Antworten
![](https://images.gutefrage.net/media/default/user/11_nmmslarge.png?v=1551279448000)
Wenn es darum geht, die 0 nach hinten zu schieben: http://stackoverflow.com/questions/9178797/c-sharp-trim-spaces-inside-array-remove-0s
Sonst benutz halt einen anderen Datentyp, wie List<Byte> und füge nur Zahlen rein, die nicht 0 sind.
![](https://images.gutefrage.net/media/user/xGlumi/1531294704056_nmmslarge__0_16_500_500_7a59b5ec15fad254db94cfe145ef7ed0.png?v=1531294704000)
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
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
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.
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
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];
}}
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
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?
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
okay mit schleifen, ich dachte es gibt noch irgendeine schon von c# gegebene Funktion dafür...
![](https://images.gutefrage.net/media/default/user/7_nmmslarge.png?v=1438863662000)
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;.
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
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...