Hexfolge in Byte Array ersetzen

Fohnbit

Top Contributor
Hallo

Ich hänge gerade an folgenden 2 Aufgaben:
Ich habe das Byte Array "comByte"

1. Aufgabe:
Wenn sich darin die Hexfolge:
"FE F0" befindet, soll das "F0" rausgelöscht werden.

2. Aufgabe:
Wenn sich darin die Hexfolge:
"FE" befindet, soll dahinter "F0" eingeschoben werden.

Wie stelle ich das am besten an?
Eine Schleife über alle Bytes ist wohl klar.
Aber wie die Bytes einfügen oder löschen?
Das Array muss ja dann neu dimensioniert werden.

Danke!
 
Hi,

das klingt doch sehr nach
1. Durchsuchen und zählen
2. neue Array erstellen
3. nun befuellen

Alternativ geht es auch mit Listen, aber das wäre ja einfach😉
 
Hallo

Ja ich weiß.
Das finden der Hexfolge ist auch nicht das Problem.
Aber wie erstelle ich das Array neu ohne die Position 7 als Beispiel?
Muss ich da wieder eine ganze Schleife erstellen oder kann man einem Array auch so füllen, das er von 0 - 6 und von 8-19 aus einem bestehenden Array nimmt?
 
eine bzw. mehrere Schleifen wären aber als Lerneffekt zu empfehlen,
nur wenn wirklich im Schlaf beherrscht und es um Vermeidung ärgerlichen Standard-Codes geht, dann API-Methoden nehmen
 
Hallo

Danke für die Inputs!

Mein Problem ist vor allem wenn mehrere Stellen im Array vorkommen.
Wenn ich eine Schleife starte und einen Treffer habe und das Array abändere, ändere ich ja das QuellArray, welches wiederum dann eine Schleife starten muss.

Ich könnte mir vorstellen zuerst eine Schleife übers ganze Array und ALLE Treffer in ein ein eigenes Array.

Danach über das Treffer Array eine Schleife und immer die Positionen überspringen.
Wäre das TrefferArray:
{4,8,16}
Müssten die Bytes vom QuellArray in einen neues so kopiert werden:
0-3,5-7,9-15,17-QuellArray.lenght
 
da gibt es verschiedene Varianten, ja
- alle Stellen suchen, dann alle verarbeiten, Wissensvorsprung schafft etwas Hilfe, etwa gleich korrekte neue Array-Länge

- bei jeder Stelle schon ersetzen, aber mit geschickten Variablenumgang an richtiger Stelle weiterarbeiten,
ständig neue Arrays vielleicht weniger, Teil-Arrays oder einzelne Bytes in einer Liste sammeln, letztlich aber neue Arrays auch nicht schlimm

- am einfachsten womöglich, auch nicht unbedingt als schlecht anzusehen, kommt auch in anderen Algorithmen vor:
nur eine Stelle ersetzen, danach komplett von vorne anfangen mit teil-korrigierten Array als neuer Eingabe,
solange wiederholen bis in einem Durchgang nichts mehr zu ändern ist,

allerdings vielleicht problematisch oder gerade erwünscht, wenn geändertes Array neue Treffer-Kombinationen ergibt,
die anderenfalls nicht aufgetreten wären
 
Zuletzt bearbeitet von einem Moderator:
1. Aufgabe:
Wenn sich darin die Hexfolge:
"FE F0" befindet, soll das "F0" rausgelöscht werden.

2. Aufgabe:
Wenn sich darin die Hexfolge:
"FE" befindet, soll dahinter "F0" eingeschoben werden.

tja ... so einfach wird das nichts ...

wenn du es so machst das du beim ersten treffer verarbeitest und dann von vorne anfängst hast du ne endlos-schleife wenn du extern nicht mitzählst ... da du ja das F0 wegnimmst ... und da es fehlt wieder dran setzt ... und so weiter ...

wenn du zwei loops nimmst hast du am ende über all FEF0 ... und den doppelten aufwand ... da du erst von allen FEF0 das F0 wegnimmst ... und dann wieder dran hängst ...

alles in allem vielleicht eher ne übungsaufgabe als wirklich sinnvoll ... denn wie gesagt : wenn man es mal eben mit einem oder zwei loops macht OHNE extern irgendwie mitzuzählen was man schon editiert hat dürfte das entweder in nem endlos-loop oder mit nem falschen ergebnis enden
 
Hallo

So sieht es schon mal gut aus:
Java:
	public static byte[] F0Clean(byte array[]) {
		  byte F0Clean[] = new byte[array.length];
		  int anzahl = 0;
		  int lastChar = 0;
		 		  
		  for(byte i : array) {
				  
		    if((i&0xff)==0xF0 & lastChar==0xFE){
		    	
		    }
		     else {
		    	 F0Clean[anzahl++] = i; 
		    	 }
		  
		    lastChar=i&0xff;
		     
		  }
		  byte result[] = new byte[anzahl];
		  System.arraycopy(F0Clean, 0, result, 0, anzahl);
		  return result;
		}
 

Neue Themen


Zurück
Oben