Entfernen Sie nachgestellte Nullen aus byte[]?
Arbeite ich mit dem TCP-Protokoll und Lesen vom socket und schreibt die Daten in ein byte [] - array.
Hier ist ein Beispiel mit meinen Daten:
94 39 E5 D9 32 83
D8 5D 4C B1 CB 99
08 00 45 00 00 98
41 9F 40 00 6C 06
9C 46 26 50 48 7D
C0 A8 01 05 03 28
Erstellte ich ein byte [] - array mit der Größe von 1024. Jetzt benutze ich diese Methode zum entfernen von null-Indizes:
public void Decode(byte[] packet)
{
byte[] temp;
int c = 0;
foreach(byte x in packet)
if (x != 0)
c++;
temp = new byte[c];
for (int i = 0; i < c; i++)
temp[i] = packet[i];
MessageBox.Show(temp.Length.ToString());
}
Aber es entfernt auch 0x00-Indizes, dass Sie vielleicht nützliche Daten...
Wie kann ich entfernen Sie die 0, die nicht gewickelt mit nicht-null-Daten (trailing-0s)?
Wie können Sie sagen, ob eine null ist, "nützlich" oder nicht?
was meinst du mit null-Indizes ?
denn die Reihenfolge ist sehr wichtig für mich...
Ein index kann nicht null in einem array. Weder der Wert, weil
Wenn dein byte[] gefüllt ist, sollte man sich ein Wert irgendwo sagen Ihnen, wie viele bytes gelesen wurden (dies ist derzeit wahrscheinlich ein Rückgabewert aus einem
was meinst du mit null-Indizes ?
denn die Reihenfolge ist sehr wichtig für mich...
Ein index kann nicht null in einem array. Weder der Wert, weil
byte
ist ein Wert-Typ. Wollen Sie zu entfernen, 0x00 Werte aus dem array?Wenn dein byte[] gefüllt ist, sollte man sich ein Wert irgendwo sagen Ihnen, wie viele bytes gelesen wurden (dies ist derzeit wahrscheinlich ein Rückgabewert aus einem
Read
Methode, die ignoriert wird). Sie sollten dies verwenden, um die Größe der array-statt nur trimmen die 0 am Ende.InformationsquelleAutor Soroush Khosravi | 2012-06-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte man sich den code, der die Lesung aus dem TCP-socket, so dass Sie nicht etwas Lesen, dass Sie beabsichtigen Weg zu werfen hinterher. Es scheint wie eine Verschwendung für mich.
Aber um Ihre Frage zu beantworten könnte man anfangen zu zählen in umgekehrter Reihenfolge, bis Sie auf eine nicht-null-byte. Nachdem Sie bestimmt haben, den index der nicht-null-byte, kopieren Sie einfach aus dem Quell-array in das Ziel-array:
Vielen Dank, es funktioniert für mich.
InformationsquelleAutor Darin Dimitrov
Dies ist eine Recht kurze und schnelle Funktion zum zuschneiden nachgestellte Nullen aus dem array.
InformationsquelleAutor nefarel
Da Sie nicht können, verkleinern Sie die Größe eines Arrays per definition müssten Sie die Verwendung einer dynamischen Datenstruktur statt.
Verwenden Sie eine Liste, zum Beispiel
Durchlaufen Ihre byte-array und jeder Wert != 0 byteList. Wenn Sie erreicht haben, das Ende der Daten in Ihrem byteArray brechen Sie die iteration ab und verwerfen Sie das array und verwenden Sie die byteList von nun an.
Wenn Sie aber möchten, verwenden Sie ein array erstellen Sie direkt aus Ihrer Liste
natürlich hast du Recht 🙂 Aber ich werde das nicht löschen, die post, vielleicht gibt es ihm eine Idee, wie man eine Liste ..
InformationsquelleAutor marc wellman
So dass Sie wollen, schneiden Sie die
0x00
s am Ende, und kopieren Sie es in ein neues array? Das wäre:Obwohl natürlich wahrscheinlich kann es irgendwie gültig
0x00
s am Ende auch.InformationsquelleAutor herzmeister
Tatsächlich sehr nahe Beispiel wurde auf der MSDN-Website. Wirklich C# 4.5-Stil - mit
Predicate<T>
. Sie können es versuchen, wenn Sie wollen (obwohl die richtige Antwort wurde bereits eingereicht)MSDN: Prädikat Delegieren
P. S. ich warte immer noch auf Linq-Stil Antwort mit
Select()
und.ToList<byte[]>()
am EndeInformationsquelleAutor Jasper
InformationsquelleAutor user4699950