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.
4 Antworten
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.
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
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];
}}
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?
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;.