wie zum umwandeln eines int-Arrays in ein byte-array in C
hey, ich würde gerne wissen, wie Sie wirken könnte ein Int-array in C ein byte-array und was wäre die Erklärung der Methode. Ich würde es begrüßen, wenn es einfacher ist und keine Verwendung von Pointern. danke für die Kommentare
ex: int addr[500] byte[]
Plus, würde ich auch wollen das Ende byte-array haben den gleichen array-Namen.
Ein integer ist 32 bit, wo da ein byte 8 bits. Sind Sie auf der Suche sind nach Ihrem byte-array 4-mal die Größe des integer-array und speichern jede ganze Zahl über 4 bytes?
Sie möchten Zugriff auf alle Byte von jedem int, oder nur das low-byte der einzelnen int?
Int ist 4 oder 8 bytes lang ist (per definition mindestens 2 denke ich)... Wie willst du es konvertieren zu 1B Typ? Zu
Was meinst du mit "cast"? Wollen Sie ein array mit den gleichen Werten in jeder position? Oder wollen Sie ein array mit den gleichen Daten, aber mit einer anderen interpretation?
@joshhendo oben beschrieben, würde ich gerne speichern, jede ganze Zahl in 4 byte. ich will also wissen, wie zu tun. Dank
Sie möchten Zugriff auf alle Byte von jedem int, oder nur das low-byte der einzelnen int?
Int ist 4 oder 8 bytes lang ist (per definition mindestens 2 denke ich)... Wie willst du es konvertieren zu 1B Typ? Zu
char[2000]
oder was? Kennen Sie den Unterschied zwischen little-und big-endian?Was meinst du mit "cast"? Wollen Sie ein array mit den gleichen Werten in jeder position? Oder wollen Sie ein array mit den gleichen Daten, aber mit einer anderen interpretation?
@joshhendo oben beschrieben, würde ich gerne speichern, jede ganze Zahl in 4 byte. ich will also wissen, wie zu tun. Dank
InformationsquelleAutor Apekshith Ramesha | 2012-02-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie versuchen, interpretieren die der Speicher hinter dem int-array als ein array von bytes, und nur dann:
Du nicht dies tun, ohne Rückgriff auf den Zeiger Gießen, wie das deklarieren einer
[]
array impliziert die Zuweisung auf stack, und kann nicht verwendet werden, für die Neuinterpretation von vorhandenen Speicher.Natürlich müssen Sie wissen, was Sie tun. Für jede
int
es wird (in der Regel, je nach Plattform, etc.) 4char
s, so dass Ihre neue array müsste500*4
Elemente. Überprüfen Sie heraus, was die Ausgabe von:sagt Ihnen, sicher zu stellen.
Wenn, die Sie versuchen zu interpretieren, jede
int
alschar
, d.h. um die gleiche Anzahl vonchar
s, da gab esint
s, dann Sie nicht dies tun, ohne einen loop und manuelle Umrechnung (um ein neues Speicher-locaton, normalerweise).Es ist erwähnenswert, dass dies eines der sehr wenigen Zeiger-casts, die ist garantiert sicher durch den C-standard.
was bedeutet "sicher" genau bedeuten?
Ich denke, es ist sicher, weil die alignment-Anforderungen von
char
sind weniger streng als diejenigen vonint
Editiert, um zu machen, die (hoffentlich) sehr klar, danke.
InformationsquelleAutor Irfy
Können Sie eine union.
InformationsquelleAutor Simon
Könnte es einfacher sein, um Zeiger verwenden, aber ohne Zeiger, versuchen Sie Folgendes:
Ich fürchte, ich habe nicht eine Antwort auf seine Einschränkungen :), was würden Sie vorschlagen, ohne Zeiger?
"Nicht tun" 😉 zumindest nicht, ohne das schreiben unnötig komplizierten code und erziehen noch mehr Fragen. Zeiger gibt es für ein verdammt-sehr-guter-Grund in C, und schreiben C: ohne Sie ist wie Fahrradfahren ohne Verwendung Beine und möglicherweise einer hand. C++ ist eine andere Geschichte.
Was ist überflüssig in meinem code? Ich glaube nicht, dass Sie tun können, besser, als wenn Sie zwei Kopien des gleichen array. Was du unten erwähnt ist nur auf den gleichen Speicher. Und die Schaltung sind immer noch mit Zeiger 😀
Ich bin nicht zu kritisieren Ihrem code -- darüber hinaus vorausgesetzt, die nicht-Zeiger-Einschränkung, es ist wahrscheinlich der des Lösung. Ich beziehe mich auf eine allgemeinere situation in der realen Welt, wo eine solche Einschränkung führt zu unnötigen code. Ich bin kritisieren die Einschränkung. Kein vernünftiger Gutachter würden es vorziehen Ihren code über mir, weil kein vernünftiger Mensch setzen würde, , Einschränkung in Platz. (Wieder, ich bin nicht wirklich vergleichen "Ihrem code" vs. "mein code" hier, das ist nicht der Punkt 🙂 )
InformationsquelleAutor vimdude
Wenn Sie wollen
int
array als Byte,int
array ist akzeptabel,dann könnte man erstellen Sie eine neue
char
array und kopieren Sie dieint
array mitmemcpy
:Dies ist ungefähr das gleiche wie der erste Ausschnitt aus meiner ursprünglichen Antwort, mit dem Unterschied, dass die
bytes
enthalten kopieren derints
(d.h. änderung hat keinen Einfluss auf die anderen). Üblichen Bemerkungen über dasint
Größe und die Vermeidung Magische Konstanten/code-refactoring anzuwenden.InformationsquelleAutor Irfy