Ich hacke herum in einigen Skripten, die versuchen, einige Daten zu analysieren, die von Javas DataOutputStream geschrieben wurden writeLong Da Java immer scheint, großes Endian zu schreiben, habe ich ein Problem, das die Bytes zu od zu füttern. Dies ist aufgrund der Tatsache, dass od immer davon ausgeht, dass die Endianess mit dem übereinstimmt Endianess des Bogens, auf dem du gerade bist, und ich bin auf einer kleinen Endianmaschine. Ich suche einen einfachen Ein-Liner, um die Byte-Reihenfolge umzukehren. Sagen wir, dass du weißt, dass die letzten 8 Bytes einer Datei lang sind Geschrieben von der oben erwähnten writeLong-Methode Meine aktuelle beste Versuch, diese lange zu drucken ist. But Tac scheint nur auf Text fair genug zu arbeiten, ich habe einige Referenzen auf dd Conv Tupfer, aber dies nur Swaps Bytes in Paaren, und kann nicht umkehren diese acht Bytes. Wer kennt einen guten Ein-Liner für diese. Jetzt am 22. Juni 11 um 10 03.Can beide laufen auf Little-Endian und Big-Endian-System. Nein, weil so ziemlich alle zwei CPUs, die so anders sind, um verschiedene Endian - Ness wird nicht die gleiche Anweisung gesetzt C isn t Java Sie don t kompilieren, um etwas, das kompiliert oder interpretiert wird Sie kompilieren, um die Montage für eine bestimmte CPU Und endian-ness ist ein Teil der CPU. But das s außerhalb der endian Fragen Sie Kann dieses Programm für verschiedene CPUs kompilieren und diese ausführbaren Dateien werden auf ihren jeweiligen CPUs gut funktionieren. Was macht ein System little-endian oder bigendend. Soweit C oder C betroffen ist, kann die CPU Verschiedene Verarbeitungseinheiten in einem Computer tatsächlich haben Verschiedene endians die GPU könnte big-endian sein, während die CPU wenig endian ist, aber das ist etwas ungewöhnlich. Wenn ich ein Byte-Order-unabhängiges C-Programm schreiben möchte, was muss ich berücksichtigen. Solange du spielst Die Regeln von C oder C, du musst dich nicht um endianische Fragen kümmern. Natürlich hast du auch die Möglichkeit, Dateien direkt in POD-Strukturen zu laden oder eine Reihe von Bytes zu lesen, so zu tun, als ob es sich um eine Reihe von unsignierten Shorts handelt Dann verarbeite ich es als eine UTF-16-codierte Zeichenfolge Alle diese Dinge treten in das Reich des implementierungsdefinierten Verhaltens ein. Es gibt einen Unterschied zwischen undefiniertem und implementierungsdefiniertem Verhalten Wenn die C - und C-Spezifikation etwas undefiniert sagt, bedeutet das im Grunde alles Art der Gebrochenheit kann folgen Wenn Sie es tun, und Ihr Programm doesn t Absturz können Sie inkonsistente Ergebnisse bekommen Wenn es heißt, dass etwas durch die Implementierung definiert ist, erhalten Sie konsistente Ergebnisse für diese Implementierung. Wenn Sie für x86 in VC2010 kompilieren, Was passiert, wenn du ein Byte-Array vorgibst, ist ein unsigned short array dh unsigned char byteArray unsigned short usArray unsigned short byteArray wird durch die Implementierung definiert Bei der Kompilierung für Big-Endian-CPUs bekommst du eine andere Antwort als beim Kompilieren für Little-Endian-CPUs. In allgemein, endian Fragen sind Dinge, die Sie lokalisieren können, um Ausgangssysteme Netzwerke, Datei lesen, etc Sie sollten in den Extremitäten Ihrer Codebase gesorgt werden. Can beide laufen auf Little-Endian und Big-Endian System. No Weil ist Bereits kompiliert für was Architektur es zielt Es wird nicht auf einer anderen Architektur laufen, dass es nicht kompatibel ist. Jedoch hat der Quellcode für das einfache Programm nichts, was möglicherweise auf verschiedenen Endian-Maschinen zu brechen. So ja es die Quelle wird gut funktionieren gut Abgesehen von void main, die Sie verwenden sollten int main statt. Wenn mein WindowsXP-System ist Little-Endian, kann ich installieren ein Big-Endian-Linux-System in VMWare VirtualBox. Endian-ness wird durch die Hardware, nicht das OS Also, was auch immer native VM Sie installieren auf sie, wird der gleiche endian wie der Gastgeber seit x86 ist alles little-endian. What macht ein System little-endian oder big-endian. Here s ein Beispiel für etwas, das sich anders verhalten wird auf kleine vs big-endian . Beachten Sie, dass dies strikt-aliasing verletzt und ist nur für Demonstrationszwecke. On Little-Endian, die unteren Bits von a sind bei der niedrigsten Adresse gespeichert Also, wenn Sie auf eine als 32-Bit-Integer zugreifen, lesen Sie die unteren 32 Bits Von ihr Auf Big-Endian, werden Sie die oberen 32 Bits zu lesen. Wenn ich eine Byte-Reihenfolge unabhängige C-Programm schreiben wollen, was muss ich berücksichtigen. Just folgen die Standard-C-Regeln und don t alles hässlich wie Das Beispiel, das ich oben gezeigt habe Vermeiden Sie unbestimmtes Verhalten, vermeiden Sie Typ-Punning. Das erste, was zu klären ist, dass Endianness ein Hardware-Attribut ist, kein Software-OS-Attribut, so dass WinXP und Linux nicht big-endian oder wenig endian sind, sondern eher die Hardware, auf der sie laufen, ist entweder big-endian oder wenig endian. Endianness ist eine Beschreibung der Reihenfolge, in der die Bytes in einem Datentyp A-System gespeichert werden, das Big-Endian speichert den bedeutendsten gelesenen größten Wert Wert zuerst und a Little-Endian-System speichert das niedrigstwertige Byte zuerst Es ist nicht zwingend erforderlich, dass jeder Datentyp derselbe wie die anderen auf einem System ist, so dass Sie gemischte Endian-Systeme haben können. Ein Programm, das wenig endian ist, würde nicht auf einem Big-Endian laufen System, aber das hat mehr mit dem Befehlssatz verfügbar als die Endlichkeit des Systems, auf dem es kompiliert wurde. Wenn Sie ein Byte-Auftrags-unabhängiges Programm schreiben möchten, müssen Sie einfach nicht von der Byte-Reihenfolge Ihrer Daten abhängen.1 Die Ausgabe des Compilers hängt von den Optionen ab, die Sie ihm geben und wenn Sie einen Cross-Compiler verwenden. Standardmäßig sollte es auf dem Betriebssystem laufen, auf dem Sie es zusammenstellen und nicht andere vielleicht nicht einmal andere vom gleichen Typ nicht alle Linux Binärdateien laufen auf allen Linux-Installationen, zum Beispiel In großen Projekten, wird dies das geringste Ihrer Sorge sein, da Bibliotheken, etc., gebaut werden müssen und verknüpft unterschiedlich auf jedem System Mit einem richtigen Build-System wie machen wird kümmern sich die meisten dieser Ohne dass Sie sich Sorgen machen müssen.2 Virtuelle Maschinen abstrahieren die Hardware so, dass im Wesentlichen alles in irgendetwas anderes ausgeführt werden kann. Wie die Betriebssysteme ihren Speicher verwalten, ist unwichtig, solange sie beide auf derselben Hardware laufen und das Virtualisierungsmodell unterstützen Ist in Gebrauch Endianness bedeutet die Byte-Reihenfolge, wenn es links-rechts oder rechts-links oder ein anderes Format gelesen wird. Einige Hardware unterstützt sowohl und Virtualisierung ermöglicht es beiden, in diesem Fall zu koexistieren, obwohl ich mir nicht bewusst bin, wie dies sinnvoll wäre, außer dass Es ist in der Theorie möglich. Allerdings funktioniert Linux auf vielen verschiedenen Architekturen und Windows einige andere als Ixxx, so dass die Situation komplizierter ist.3 Wenn Sie Affen mit rohem Speicher, wie mit binären Operatoren, können Sie sich in eine Position von abhängig Auf endianness Allerdings ist die meisten modernen Programmierung auf einem höheren Niveau als dies Als solche sind Sie wahrscheinlich zu bemerken, wenn Sie in etwas, das endianness-basierte Einschränkungen auferlegen können, wenn dies jemals erforderlich ist, können Sie immer implementieren Optionen für beide Endiannesses mit dem Preprocessor. answered Feb 11 12 at 2 46.Endianness Big und Little Endian Byte Order. Bi Big Little Endian. Bi-Endian Prozessoren können in jedem Modus ausgeführt werden, aber nur ein Modus kann für den Betrieb gewählt werden, gibt es keine Bi-Endian Byte Order Byte Order ist entweder große oder kleine endianwork Byte Order. Big Endian Byte Bestellung wurde als Neutral oder Standard für Netzwerk-Datenaustausch gewählt und damit Big Endian Byte Bestellung ist auch als Network Byte Order bekannt, so Little Endian Systeme werden ihre konvertieren Interne Little Endian Darstellung von Daten an Big Endian Byte Bestellung beim Schreiben in das Netzwerk über einen Socket Dies erfordert auch Little Endian Systeme, um die Byte Bestellung beim Lesen aus einer Netzwerkverbindung zu tauschen Sprachen wie Java verwalten dies für Sie, damit Java-Code laufen kann Auf jeder Plattform und Programmierer müssen nicht zu verwalten Byte Bestellung. Es ist wichtig zu beobachten Network Byte Order nicht nur um heterogene Hardware zu unterstützen, sondern auch um heterogene Sprachen zu unterstützen. Byte Auftrag und Daten-Darstellung in memory. Big endian bezieht sich auf die Reihenfolge, wo die Höchstwertige Bytes kommen zuerst Das bedeutet, dass die Bytes, die die größten Werte repräsentieren, zuerst kommen. Regelmäßige Ganzzahlen werden auf diese Weise gedruckt Die Nummer 1025 zeigt die Ziffer eins zuerst, die 1000 repräsentiert. Dies ist eine Repräsentation, die am menschlichsten ist. Dieser bedeutendste Wert wird zuerst in Bytes dargestellt Für die Computerspeicherdarstellung Die Nummer 1025 ist in Hex als 0x0401 dargestellt, wobei 0x0400 für 1024 steht und 0x0001 die Ziffer 1 darstellt. Die Summe beträgt 1025 Das bedeutendste größere Wertbyte wird zuerst in dieser Big-Endian-Darstellung aufgeführt. Man kann sehen, dass die Wortgröße ist Ein Faktor sowie ermittelt, wie viele Bytes verwendet werden, um die Zahl darzustellen. Endian-Byte-Reihenfolge wirkt sich auf ganzzahlige und Gleitkommadaten aus, wirkt sich jedoch nicht auf Zeichenketten aus, da sie die Zeichenkettenreihenfolge beibehalten und beabsichtigt durch die Programmierer.16 Bitdarstellung in Memory. Big Endian Hex 0x0401 binär 00000100 00000001.Little Endian Hex 0x0104 binär 00000001 00000100.32 Bit-Darstellung im Speicher. Big Endian Hex 0x00000401 binär 00000000 00000000 00000100 00000001.Little Endian Hex 0x01040000 binär 00000001 00000100 00000000 00000000.32 Bit-Darstellung im Speicher. Big Endian Hex 0x00020804 Binary.64 bit-darstellung im memory. Big Endian Hex 0x0000010000040880 binär 00000000 00000000 00000001 000000000000000 00000100 00001000 10000100.Little Endian Hex 0x8008040000010000 binär 10000100 00001000 0000000 00000000 000000000 0000001 00000000 00000000.Hinweis, dass die Bytes, die die ganze Zahl repräsentieren, ausgetauscht werden Die Bytes werden umgekehrt und die Bits innerhalb des Bytes werden nicht umgekehrt. Conversion und Swapping Bytes. Byte Swapping, um die Endianness der Binärdaten umzuwandeln, kann mit den folgenden Makros, Routinen oder Bibliotheken erreicht werden Die Java Virtual Machine arbeitet im Big-Endian-Modus auf allen Plattformen und damit oft immun gegen Prozessorarchitektur-Effekte Daten-Dateien erleiden jedoch oft die Auswirkungen von Hardware Auch Dateiformat-Standards können betroffen sein, zum Beispiel Datendateien wie JPEG werden im Big Endian Format gespeichert, während GIF und BMP in Little Endian gespeichert sind Format. Integers, Gleitkommadaten moderne Systeme und Bitfelddaten werden Byte ausgetauscht, um zwischen großen und kleinen Endian-Systemen umzuwandeln ASCII-Text ist nicht Dies ist aufgrund der internen Darstellung von numerischen Daten und der Methode, in der es verarbeitet wird. Beachten Sie, dass Gleitkomma Daten-Darstellung zwischen einem älteren System und einem neueren IEEE-Gleitkomma-basierten Prozessor erfordert Format-Konvertierung vor Byte-Reihenfolge ist sogar eine Betrachtung zB Float-Transfer zwischen System 390 Mainframes und Intel-basierte Systeme. C Makros zu austauschen Bytes auf kleine endian Systeme. Bytes können auch sein Ausgetauscht programmgesteuert, aber das ist langsamer als das der Makrooperation gezeigt, aber für andere Wortgrößen anwendbar, in diesem Fall 128 Bits. Eine generische In-Place-Byte-Swapping-Endian-Konvertierungsroutine für eine vom Benutzer spezifizierte Anzahl von Bytes. Byte Swapping-Bibliotheken. Es gibt Byte-Swapping-Bibliotheken, die in den meisten CC-Bibliotheken enthalten sind Die am häufigsten verwendeten Routinen sind htons und ntohs für Netzwerk-Byte-Reihenfolge Conversions verwendet Der Host zu Big Little Endian Routinen htobe16 be16toh, etc. sind vollständiger, da sie Swaps von 2, 4 und 8 Bytes verarbeiten Diese Routinen sind plattformunabhängig und wissen, dass ein Swap nur bei Little Endian-Systemen erforderlich ist. Kein Swapping wird auf die Daten angewendet, wenn sie auf einem Big Endian Hostcomputer ausgeführt werden, da die Daten bereits im Netzwerk Byte order. htons ntohs und htonl ntohl konvertieren Werte zwischen Host und Netzwerk-Byte order. uint16t htons uint16t konvertiert die unsigned kurze Ganzzahl von Host-Byte-Reihenfolge zu Netzwerk-Byte order. uint16t ntohs uint16t konvertiert die unsigned kurze Integer aus Netzwerk-Byte-Reihenfolge zu Host-Byte order. uint32t htonl uint32t konvertiert die unsigned lange Integer aus Host Byte-Reihenfolge zum Netzwerk-Byte order. uint32t ntohl uint32t konvertiert die unsigned lange Ganzzahl von der Netzwerk-Byte-Reihenfolge zu Host-Byte-Reihenfolge. HTML16 Be16toh, auch 32 und 64 Bit konvertieren Werte zwischen Host und Big-Little-Endian Byte order. uint16t htobe16 uint16t host16bits Host Zu Big Endian Swap 16 Bits. uint16t htole16 uint16t host16bits Host zu Little Endian Swap 16 Bits. uint16t Be16toh uint16t bigendian16bits Big Endian zu Host Swap 16 Bits. uint16t le16toh uint16t littleendian16bits Little Endian zu Host Swap 16 Bits. uint32t htobe32 uint32t host32bits. uint32t htole32 Uint32t host32bits. uint32t be32toh uint32t bigendian32bits. uint32t le32toh uint32t littleendian32bits. uint64t htobe64 uint64t host64bits. uint64t htole64 uint64t host64bits. uint64t be64toh uint64t bigendian64bits. uint64t le64toh uint64t littleendian64bits. output wenn auf einem Little Endian system. Other weniger würdige options. In GCC nicht Tragbar für Sie können direkt call. int32t builtinbswap32 int32t x. int64t builtinbswap64 int64t x. Two Makros in Byteswap h. int32t bswap32 int32t x. int64t bswap64 int64t x. Additional endian Umwandlung Bibliotheken, Funktionen und Makros. Gnome Byte Auftrag Makros. Qt Byte Reihenfolge Functions. See Makros in Include-Dateien Linux-Kernel H und Asm Byteorder H Usr gehören Linux-Byteorder Littleendian H hat aktuelle Makros Le16tocpu, Cputole16, Be16tocpu und Cputobe16 für 16, 32 und 64 Bit-Variablen Siehe auch die Versionen, die einen Zeiger als Argument Versionen nehmen Des Makros haben Funktion Rückgabewerte sowie Argument Rückgabewerte. Boost Endian Makros - Siehe. Bit Feld Conversions. Bit Feld Datenstrukturen werden durch den Compiler in der umgekehrten Reihenfolge auf Big und Little Endian Systeme dargestellt. Hinweis der Verwendung des Makros Um die Endianess des Systems zu bestimmen und damit die Reihenfolge des Bitfeldes zu verwenden Die Struktur wird für Cross-Plattform-Nutzung geschrieben und kann auf Big - und Little-Endian-Systemen verwendet werden. Die folgenden Makros werden die Unterschiede in der Bitfelddarstellung zwischen groß und verarbeiten Kleine Endian-Systeme Das Bit-Feld-Struktur benötigt dann Byte-Swapping, um die endianische Übersetzung zu behandeln. Obwohl diese Verwendung von Makro-definierten Anweisungen für Bit-Feld-Nuancen anpassen wird, tauscht es keine Bytes aus, die beim Austauschen von Daten immer noch auftreten müssen. Man kann Makros verwenden Um Bits in entgegengesetzter Reihenfolge auf großen und kleinen endianischen Systemen zu definieren, oder man kann sie programmgesteuert umkehren. Tests und Beispiele. Test Bitfeld positionspile g Run Ergebnisse für Intel x8664 Architektur kleiner Endian G4 PPC und SunOS 5 8 sun4 sparc sun-blade 2500.My Am häufigsten verwendete Werkzeug bei der Arbeit mit Bitmanipulationen und Betrachtungsbits ist kcalc der KDE-Rechner, der Daten als Bits, Hex-Bytes, Oktal und als Dezimalzahlen anzeigen kann. Ubuntu apt-get install kcalc. Wenn wir mit größeren Datenmengen arbeiten, finde ich Der Gnome-Hex-Editor, um nützlich zu sein Installation Ubuntu apt-get install ghex. C So programmieren Sie von Harvey M Deitel, Paul J Deitel ISBN 0131857576, Prentice Hall. Fünfte Ausgabe Die erste Ausgabe dieses Buches und Professor Sheely bei UTA lehrte mich zu programmieren C Es ist komplett und deckt alle Nuancen der C-Sprache Es hat auch gute Code-Beispiele Gut für Lernen und Referenz. Exceptional C 47 Engineering Puzzles, Programmierung Probleme und Lösungen von Herb Sutter ISBN 0201615622, Addison-Wesley Professional. Advanced C Features Und STL. Mehr außergewöhnliche C von Herb Sutter ISBN 020170434X, Addison-Wesley Professional. Effective C 50 Spezielle Möglichkeiten zur Verbesserung Ihrer Programme und Design 2nd Edition von Scott Meyers ISBN 0201924889, Addison-Wesley Professional. Mehr effektive C 35 neue Möglichkeiten, um Ihre zu verbessern Programme und Designs von Scott Meyers ISBN 020163371X, Addison-Wesley Professional. Little endian binäre Optionen. Wenn Sie nicht vertraut sind, wie man unsigned Daten in Java durch Maskierung der High-Order-Bits fudge, möchten Sie vielleicht die unsigned und masking Einträge lesen Zuerst in Gulliver s Reisen die Lilliputians gern ihre Eier am kleinen Ende und die Blefuscudians am großen Ende zu brechen Dies wird manchmal als endian-agnostic Little endian binäre Optionen Detaillierte Statement Mt4 Forex Manipulieren Streams von binären Daten-Offset mit spezifizierten Endian Format writeDoubleBE schreibt big endian, writeDoubleLE schreibt wenig endian Blefuscudians big-endians behaupten, das ist die Art und Weise, wie Gott beabsichtigte, ganze Zahlen zu speichern, wichtigste Teil zuerst Dies wird als Big-Endian-Byte-Sex oder manchmal Netzwerk-Order bezeichnet. Die einzige Zeit endianness wird ein Sorge ist in der Kommunikation mit Legacy-Little-Endian-Klassen, hier ist die grundlegende Technik Das Problem kommt, wenn Sie Datendateien mit einem Programm nicht geschrieben in die meisten Menschen neu in Java aus C denken, dass sie brauchen, um Code anders abhängig, ob die Maschine, die sie intern verwenden, repräsentiert ganzzahlige, als große oder kleine Endiane. Ohne Rückgriff auf einheimische Klassen gibt es keine Möglichkeit, dass man sogar sagen kann, wie sie gespeichert werden. Zwangs - oder Klein-Endian-Byte-Reihenfolge auf Gleitkomma-Werten für den Datenaustausch erzwingen Kann nur funktionieren, wenn alle Plattformen die gleiche binäre Darstellung verwenden Little endian binäre Optionen binäre Optionen Signale Ergebnisse von texas Eine Binärdatei mit Zeichen, die in einer benutzerdefinierten Unicode-Codierung anders als UTF-8 codiert sind Die Atome groß und wenig bezeichnen big - oder little-endian Codierung Dies kann bei der Bearbeitung von Binärdaten verwendet werden, die in Dateien oder aus dem Netzwerk gespeichert sind. Zum Beispiel sind Intel x86 und AMD64 x86-64 Little-Endian Motorola 68000 Es hat den Implementierungsparameter implementiert und es funktioniert immer noch. Manipulieren von Streams von binärem Datenoffset mit dem angegebenen Endian-Format WriteDoubleBE schreibt Big Endian, writeDoubleLE schreibt wenig Endian Annahme, dass Ihre Integer in 2 s Komplement Little-Endian-Format sind, Shorts sind ziemlich einfach, um Codierungen zu behandeln Sollten Zahlen am meisten oder am wenigsten signifikante Byte zuerst gespeichert werden. Ein Assembler Level Felder von gemischten positiven ganzen Zahlen und Text kann sortiert werden, als ob es eine große Textfeldschlüssel wäre Little endian binäre Optionen Echte Programmierer lesen Hex-Dumps und Little-Endian ist eher ein anregender Forex Short Positionen Eine Binärdatei mit Zeichen, die in einer benutzerdefinierten Unicode-Codierung anders als UTF - 8 Die Atome groß und wenig bezeichnen Groß - oder Klein-Endian-Kodierung Das ist der Grund, warum ich die Reverse-Engineering eines Binärdateiformats nicht als illegale Handlung gegen den Grund betrachte, warum kleine Endian-Prozessoren Harmonic Elliott Wave Trading Systems starten, die Ströme von Binärdateien manipulieren Daten-Offset mit spezifiziertem Endian-Format writeDoubleBE schreibt Big-Endian, writeDoubleLE schreibt wenig endian Diese Bestellung macht das Schreiben von Multi-Präzisions-Arithmetik einfacher, da Sie nicht oben arbeiten. Was tun Sie, wenn Ihre Datendateien im Little-Endian-Format sind, wie es der Fall wäre Für die meisten Windows-95 Binärdateien Sie können Binärdaten elektronisch über das Internet oder auf CD-Diskette ohne jegliche Bedenken über die Endlosigkeit austauschen. Die JVM kann sie entweder intern intern speichern, aber Java ist clever konstruiert, so dass es niemals auf Little endian binäre Optionen geht Verlassen Forex School Java hat keine struct IO und keine Gewerkschaften oder irgendwelche der anderen endian-sensible Sprache Konstrukte Little endian binäre Optionen Real Programmierer lesen Hex Dumps und Big-Endian ist viel einfacher zu verstehen Die binäre Version einer Nachricht verwendet nur das Feld S-Nummer als Schlüssel der Name und In beiden Fällen werden die Werte in Little-Endian-Byte-Reihenfolge gespeichert Lilliputians Little-Endians behaupten, dass das Setzen der niedrigen Auftragsteil zuerst natürlicher ist, weil, wenn Sie Arithmetik manuell tun, beginnen Sie an der am wenigsten bedeutsamen Teil Und arbeiten auf den bedeutendsten Teil. Java Binärdateien, Java-Sockets und Open-Type-Font-Dateien verwenden auch Big-Endian-Reihenfolge Little endian binäre Optionen Wenn eine Maschine ist Wort adressierbar, ohne feinere Adressierung unterstützt, das Konzept der endianness bedeutet nichts seit Worten Werden aus dem RAM Oracle's Schulter Trader geholt In der Little-Endian Camp am wenigsten signifikante Byte ersten sind die Intel 8080, 8086, 80286, Pentium und Follow-ons und die MOS 6502 popularisiert von der Apple Forex Signal 30 No Repaint Normalerweise als Big-Endian verwendet , Sondern hat auch Unterstützung für den Betrieb für Little-Endian-Modus, einschließlich der Möglichkeit, Endianness unter Programmsteuerung für bestimmte Lasten und Läden zu wechseln. Best Trading Sites.24Option Trade 10 Minuten Binaries. TradeRush Account Öffnen Sie ein Demo-Account. Boss Capital Start Trading Live Today. array entpacken String-Format String data. Unpacks aus einer binären Zeichenfolge in ein Array nach dem angegebenen Format. Die ausgepackten Daten werden in einem assoziativen Array gespeichert Um dies zu erreichen müssen Sie die verschiedenen Format-Codes benennen und trennen sie durch einen Schrägstrich If Ein Repeater-Argument vorhanden ist, dann hat jeder der Array-Schlüssel eine Sequenznummer hinter dem angegebenen Namen. Siehe Pack für eine Erläuterung der Formatcodes. Die gepackten Daten. Hinweis, dass PHP intern integrale Werte als signiert speichert Wenn du ein großes auspackst Unsigned lang und es ist von der gleichen Größe wie PHP intern gespeicherte Werte das Ergebnis wird eine negative Zahl sein, obwohl unsigned Auspacken angegeben wurde. Wenn Sie nicht benennen ein Element, numerische Indizes ab 1 verwendet werden Beachten Sie, dass, wenn Sie mehr haben Als ein unbenanntes Element, werden einige Daten überschrieben, weil die Nummerierung von 1 für jedes Element neu gestartet wird. Beispiel 3 entpacken Beispiel mit unbenannten Schlüssel. Php binarydata x32 x42 x00 xa0 Array entpacken c2 n binarydata vardump array. Ich hatte eine Situation, wo ich musste eine Datei mit wenig-endian Ordnung Doppel-Floats in einer Weise, die auf entweder Little-Endian oder Big-Endian Maschinen funktionieren ausgepackt werden PHP hat keinen Formatierungscode, der die Byte-Reihenfolge von Doppelteilen ändern wird, also habe ich diesen Workaround geschrieben. Php Der folgende Code ist ein Workaround für die php s entpacken Funktion, die nicht die Möglichkeit hat, doppelte Präzisionsschwimmer auszupacken, die in der entgegengesetzten Byte Reihenfolge der aktuellen Maschinenfunktion gepackt wurden bigendianunpack Format Daten entpacken Format Daten vals arrayvalues ar f explodieren Format i 0 foreach f als fk fv repeater intval substr fv 1 wenn repeater 0 repeater 1 wenn fv repeater count ar - i wenn fv dji repeater für aiajap pack d vals ip strrev p list vals i arrayvalues entpacken d1d pia 0 foreach ar als arche arv ar ark Vals aa return ar. list endiantest arrayvalues entpacken L1L pack V 1 wenn endiantest 1 definieren BIGENDIANMACHINE 1 wenn definiert BIGENDIANMACHINE unpackworkaround bigendianunpack sonst unpackworkaround entpacken. Dieser workaround wird wie folgt verwendet. function foo global unpackworkaround bar unpackworkaround N7N V2V d8d mydata. On ein wenig endian Maschine, entpacken Sie sich einfach auf die Funktion auspacken Auf einem großen Endian-Maschine, wird es die Workaround-Funktion aufrufen. Hinweis, diese Lösung funktioniert nur für Doppel-In meinem Projekt hatte ich keine Notwendigkeit, für einzelne Präzision floats. A Helper-Klasse zu konvertieren Integer zu binären Strings und umgekehrt Nützlich für das Schreiben und Lesen von Integern aus Dateien oder Sockets. Klasse inthelper öffentliche statische Funktion int8 Ich Rückkehr isint i pack ci entpacken ci 1.public statische Funktion uInt8 Ich Rückkehr isint i pack C Ich entpacke C i 1.public static function int16 ich komme isint i pack si entpacken si 1.public static function uInt16 i endianness false f isint i pack unpack. return isarray ii 1 i. public static function int32 Ich versende isint i pack li entpacken li 1.public static Funktion uInt32 i Endianness falsch f isint i pack unpack. return isarray ii 1 i. public statische Funktion int64 i return isint i pack qi entpacken qi 1.public statische Funktion uInt64 i endianness false f isint i pack unpack. return isarray ii 1 i. Verwendungsbeispiel php Header Inhalt-Typ Text Ebene include. echo inthelper uInt8 0x6b PHPEOL k echo inthelper uInt8 107 PHPEOL k echo inthelper uInt8 x6b PHPEOL PHPEOL 107.echo inthelper uInt16 4101 PHPEOL x05 x10 echo inthelper uInt16 x05 x10 PHPEOL 4101 echo inthelper uInt16 x05 x10 True PHPEOL PHPEOL 1296.echo inthelper uInt32 2147483647 PHPEOL xff xff xlif echo inthelper uInt32 xff xff xff x7f PHPEOL PHPEOL 2147483647. Hinweis Testen Sie dies mit 64-Bit-Build von PHP Echo Inthelper uInt64 9223372036854775807 PHPEOL xff xff xff xff xff xff xlif echo inthelper UInt64 xff xff xff xff xff xff xff x7f PHPEOL PHPEOL 9223372036854775807.Suppose müssen wir irgendeine Art von internen Darstellung einer Ganzzahl, sagen wir 65, als vier-Byte lang Dann verwenden wir, so etwas wie. I 65 s pack l, ich lang 32 bit, maschine byte bestellen echo strlen s br n echo s br n. X-Powered-By PHP 4 1 2 Inhaltstyp Text html. Das ist die Saite A 0 0 0.Nun wollen wir von String A 0 0 0 auf Nummer 65 zurückkehren. In diesem Fall können wir verwenden. S A 0 0 0 Dieser String ist die Bytes-Darstellung der Nummer 65 arr entpacken l, s foreach arr als Schlüsselwert echo arr Schlüsselwert br n. Und dieser Outpus X-Powered-By PHP 4 1 2 Inhaltstyp Text html. Let S geben die Array-Schlüssel einen Namen, sagen mykey In diesem Fall können wir verwenden. S A 0 0 0 Dieser String ist die Bytes-Darstellung der Nummer 65 arr entpacken lmykey, s foreach arr als Schlüsselwert echo arr Schlüsselwert n. An diesem Outpus X-Powered-By PHP 4 1 2 Inhaltstyp Text html. The Auspacken Dokumentation ist ein bisschen verwirrend Ich denke, ein vollständigeres Beispiel könnte sein. Binarydata AA 0A Array entpacken c2chars nint, binarydata foreach Array als Schlüsselwert Echo Array Schlüsselwert br n. whose Ausgabe is. X-Powered-By PHP 4 1 2 Content-Text Text HTML. Array Chars1 65 Br Array Chars2 65 Br Array Int 65 Br. Hinweis, dass die Format-String ist so etwas wie Format-Code zählen Array-Key. Ich hoffe, dies klärt etwas. Die Dokumentation ist klar, dass eine Ganzzahl lesen mit einem unsigned Format Zeichen noch Als unterschriebene Ganzzahl gespeichert werden Die oft zitierte Arbeit ist es, Sprintf u, Bigint zu verwenden, um ganzzahlig ganze Zahlen mit dem MSB-Set anzuzeigen. In dem Fall, wo der numerische Wert wichtiger ist, als wie es angezeigt wird, können Sie immer noch mit arbeiten Andere große Integer mit intval, um Ihre bestehenden unsigned integers zu aktualisieren. Ich hatte ein Problem beim Vergleichen von 32-Bit-Integers aus Dateien mit hartcodierten Konstanten Dateisignaturen neigen dazu, dies zu brauchen Hier ist, was ich getan haben, um zu vermeiden, alles in Strings zu verwandeln. Verpackte Packung n bigint. list ausgepackte Arraywerte entpacken N gepackt. Der Bigint bleibt eine vorzeichenlose Ganzzahl Auch wenn ihre bitweise Werte identisch sind, verglichen fucks. echo bigint, bigint ausgepackt, ausgepackt n. Intval triggert eine re-interpretation von bigint bigint wird intern als signierte integer verglichen Da der bitweise Wert von bigint sich niemals ändert, wird der Vergleich succeeds. echo intval bigint, intval bigint ausgepackt, ausgepackt n. It funktioniert, aber es ist ein kleiner rückwärts If Jeder hat irgendwelche Ideen, wie man eine signierte Ganzzahl in eine vorzeichenlose Ganzzahl herunterführt, ohne Strings zu verwenden, das wäre eine wertvolle Note, um die Dokumentation hinzuzufügen. Sie bewusst das Verhalten deines Systems, das PHP auf befindet. On x86, entpacke MAY nicht Geben Sie das Ergebnis, das Sie für UInt32 erwarten. Dies ist aufgrund der internen Natur von PHP, da die ganzen Zahlen intern als SIGNED gespeichert. Für x86-Systeme, entpacken N, xff xff xff xff Ergebnisse in -1 Für die meisten x64-Systeme, entpacken N, Xff xff xff xff Ergebnisse in 4294967295.This kann überprüft werden, indem Sie den Wert von PHPINTSIZE Wenn dieser Wert 4 ist, haben Sie eine PHP, die intern speichert 32-Bit Ein Wert von 8 intern speichert 64-bit. To um dieses Problem zu umgehen, Sie können den folgenden Code verwenden, um Probleme mit dem Auspacken zu vermeiden Der Code ist für Big-Endian-Reihenfolge, aber kann leicht für kleine endian Reihenfolge auch angepasst werden, ähnlicher Code funktioniert für 64-Bit-Integer. PHP-Funktion uint32be bin bin ist die binäre 32-Bit-BE-String, die die Ganzzahl repräsentiert, wenn PHPINTSIZE 4 Liste, hl entpacken n bin return lh 0x010000 else list, int entpacken N bin return int. Do beachten Sie, dass Sie auch Sprintf u, x verwenden können Um den unsignierten realen Wert zu zeigen. Beachten Sie auch, dass zumindest wenn PHPINTSIZE 4 das Ergebnis ein Float-Wert sein wird, wenn die Eingabe größer ist, dann 0x7fffffff nur mit gettype. Hope dies hilft people. Here sa Demonstration über die Geschwindigkeit des Auspackens von Dateien So let s Sehen Sie, welche Methode am schnellsten zwischen FREAD oder SUBSTR. I war das Erstellen eines Skripts, das Szenario-Dateien aus einem Spiel lesen konnte, und machen Sie eine Vorschau auf seine Gelände Die Geländestruktur in jeder Datei war riesig zwischen 100.000 - 1.000.000 Blöcke mit 3 Bits von Daten jeweils Deshalb habe ich viel Mühe gemacht, um sicherzustellen, dass es schnell und robust war. Methode 1 Diese Methode ruft die 3 Bits von Daten in jedem Block gefunden Es verwendet die Schleife von widthxheight und implodieren entpacken substr jeder Block PHP für Y 0 Y Breite Höhe Y Output Map Y TerrainID implode null entpacken c1 substr Input Line Line 1 Ausgangskarte Y Elevation implode null entpacken c1 substr Input Line Line 1 Ausgangskarte Y Unbekannt implode null entpacken c1 substr Input Line Line 1 Die durchschnittliche Mikrozeit war 2 9 sec Beachten Sie, dass es noch mehr dauert Zeit, wenn Sie eine benutzerdefinierte Funktion verwenden, um die Implode zu implementieren, entpacken Sie substr-Funktionen. Now Diese Methode verwendet die FREAD-Funktion PHP für Y 0 Y Breite Höhe Y Ausgang Karte Y entpacken c3 fread sc 3 Durchschnittliche Mikrozeit war 0 7 sec Ich empfehle die FREAD-Methode Anstelle von SUBSTR. Another Test Diese Methode ist 10x schneller als die oben Dies verwendet nicht die FOR-Schleife php Output Map Daten entpacken c width height streamgetcontents sc Durchschnittliche Mikrozeit 0 08 - 0 05 sec. Wenn Sie Dateien viel schneller lesen wollen, Sollte versuchen, die Anzahl der Schleifen zu reduzieren und die Entpackungsfunktion zu ihrer einfachsten und robusten Methode zu verwenden. Lesen einer Textzelle aus einer Excel-Kalkulationstabelle zurückgegeben eine Zeichenfolge mit niederwertigen eingebetteten Null 0x4100 0x4200 usw. Um die Nullwerte zu entfernen, verwendet. Php strWithoutNulls implode explodieren 0 strWithNulls. Auspacken didn t scheinen zu helfen, hier zu helfen, brach hier zurück, um die Zeichenkette wiederherzustellen, nicht ganze Zahlen. Funktion parsepascalstr bytesparsed parsestr parseinfo entpacken x bytesparsed cstrlen parsestr strlen parseinfo strlen bytesparsed bytesparsed 1 parseinfo entpacken x bytesparsed A strlen str parsestr str parseinfo str bytesparsed bytesparsed Strlen str. return array str bytesparsed. Ich schrieb ein schnelles Paar von Funktionen mit pack entpacken für die Umwandlung zwischen raw binary zB opensslrandompseudobytes Ausgabe und hexadezimal zB Hash-Ausgabe. PHP-Funktion raw2hex raw m entpacken H roh return m 1.function hex2raw hex return pack H hex. Feel frei, um irgendwelche Verbesserungen vorzuschlagen, aber ich dachte, das war es wert zu teilen.
No comments:
Post a Comment