Wednesday 8 November 2017

Little Endian Binary Optionen


Windows auf IntelAMD ist auch Little-Endian, so dass keine Endianness-Konvertierung erforderlich ist. Jetzt, wenn du den spezifischen Datensatz zeigen kannst und wo du die Binärdaten bekommst, ist es einfacher zu beantworten. Sie können jede Art von Datensatz aus einer Datei lesen. Wenn Ihr Datensatz so deklariert ist, dass es genau das gleiche Layout wie die Binärdaten hat, können Sie einen ganzen Datensatz auf einmal lesen. Wenn nicht, müssen Sie jedes Feld separat lesen. Im Allgemeinen können Sie Datensätze oder einzelne Felder eines Datensatzes aus einem Stream mit Wenn Ihre Daten aus einem TCP-Sockel stammen, können Sie zB in ein TMemoryStream als Bytes schreiben. Dann kannst du den Zeiger des Streams zum Anfang zurücksetzen und die Daten wie gezeigt auslesen. Wie David kommentierte, wenn die Bytes über die TCP-Verbindung in der Netzwerk-Byte-Reihenfolge kommen, dann ist es sinnvoll, jedes Feld durch eine der WinSock-Funktionen ntohs () oder ntohl () auszuführen. Nach all den oben genannten, aber bevor die Elemente in der Platte verwendet werden. Ntohs () konvertiert 2 Byte-Typen, während ntohl () 4 Byte-Typen umwandelt. Um Gegenstände zu senden, verwenden Sie die Reverse-Funktionen htons () und htonl () auf jedem Eintrag im Datensatz vor dem Senden (separat). FWIW, es ist ganz einfach, in Win32, um Endianness zu ändern: Ich muss Nachricht von Windows Server auf HP Server zu TCPIP Sockets senden. Ich verwende Framework 4.0 mit Visual Studio 2012. Ich bin bei der Umwandlung von kleinen bis großen Endian geschlagen. Ich speichere alle Werte, die in einer Struktur an die andere Maschine gesendet werden müssen und dann die Struktur in ein Byte-Array umwandeln. Dieses Byte-Array wird dann über den Sockel gesendet. Es gibt mehrere Nachrichtenstrukturen wie diese und wir haben es voll entwickelt. Nun wurde gesagt, dass das andere System HP Server ist und wir müssen in Big Endian umwandeln, bevor wir es senden und auch das Big Endian zu Little Endian umwandeln, nachdem wir die Daten erhalten haben. Gibt es eine einfache Möglichkeit, diese in der Strukturform zu konvertieren Die Struktur, die ich habe: Der Code, den ich verwende, um eine Struktur in ein Byte-Array umzuwandeln: In der unten stehenden Code enthält die Variable quittagequot die ACMMessage-Struktur und das ByteArray wird zurückgegeben. Dann wird das ByteArray über die TCPIP-Buchse gesendet. Der copyStartIndex wird in diesem Fall immer 0 sein. In dieser Art von Entwicklung, wie soll ich von Wurf zu Big Endian umwandeln und umgekehrt Dienstag, 30. September 2014 9:56 Uhr Wenn es ein einziges Feld wie Doppel oder String oder Integer ist, wird es funktionieren, wie Sie gesagt haben. Aber ich arbeite mit einer Struktur. Das ist wirklich egal Sie wissen, wie viele Bytes es braucht, um jedes Feld der Struktur darzustellen, das durch den Datentyp für die meisten Ihrer Felder bestimmt wird, und durch die angegebene Größenkonstante für den String. Sie wissen auch, dass alle Felder Daten in der deklarierten Reihenfolge vorhanden sind, weil Sie Sequentielles Layout angegeben haben. So verwenden Sie entweder vorgeschlagene Methode zum Umkehren eines Byte-Arrays und konvertieren jedes Sub-Chunk des gesamten Byte-Arrays entsprechend jeder Feldgröße. Angesichts dieses Beispiel-Layouts: Sie sollten in der Lage sein, eine Routine so etwas wie dies zu verwenden: Reed Kimble - quotWhen Sie Dinge richtig machen, werden die Leute nicht sicher, dass Sie irgendetwas bei allquot getan haben Vorgeschlagen als Antwort von dbasnett Mittwoch, 01. Oktober 2014 10:53 AM Als Antwort von Carl Cai Moderator markiert Dienstag, 07. Oktober 2014 06:02 Dienstag, 30. September 2014 17:11 Ich denke deine Struktur ist zu groß. Sie könnten erwägen, es in eine Klasse mit Eigenschaften umzuwandeln und den Code hinzuzufügen, den du für diese Klasse suchst. Ich sehe zwei Methoden vor, die jeweils ein Byte-Array, ToBigEndian und ToLittleEndian zurückgeben. Vielleicht solltest du erklären, wie du deine gebuchte Struktur in ein quotbyte arrayquot umwandelst. Mark die besten Antworten als Antworten. "Fooling Computer seit 1971.quot Dienstag, 30. September 2014 12:21 PM Wenn es ein einziges Feld wie Doppel oder String oder Integer ist, wird es funktionieren, wie du gesagt hast. Aber ich arbeite mit einer Struktur. Dienstag, 30. September 2014 14:07 Ich habe etwa 40 verschiedene Strukturen. Konvertieren all dies wäre ein großer Job. In meiner Frage selbst ist der Code zur Umwandlung der Struktur in das Byte-Array gegeben. Auf jeden Fall hier wieder einklemmen Bearbeitet von Perichiappan Lakshmanan Dienstag, 30. September 2014 2:09 PM Dienstag, 30. September 2014 2:08 PM Du wirst ein Byte-Array zurückkehren, um so ein Code zu schreiben, wenn es am Ende der Funktion am Dienstag, September ist 30, 2014 2:29 PM Wenn es ein einziges Feld wie Doppel oder String oder Integer ist, wird es funktionieren, wie du gesagt hast. Aber ich arbeite mit einer Struktur. Das ist wirklich egal Sie wissen, wie viele Bytes es braucht, um jedes Feld der Struktur darzustellen, das durch den Datentyp für die meisten Ihrer Felder bestimmt wird, und durch die angegebene Größenkonstante für den String. Sie wissen auch, dass alle Felder Daten in der deklarierten Reihenfolge vorhanden sind, weil Sie Sequentielles Layout angegeben haben. So verwenden Sie entweder vorgeschlagene Methode zum Umkehren eines Byte-Arrays und konvertieren jedes Sub-Chunk des gesamten Byte-Arrays entsprechend jeder Feldgröße. Angesichts dieses Beispiel-Layouts: Sie sollten in der Lage sein, eine Routine so etwas wie dies zu verwenden: Reed Kimble - quotWhen Sie Dinge richtig machen, werden die Leute nicht sicher, dass Sie irgendetwas bei allquot getan haben Vorgeschlagen als Antwort von dbasnett Mittwoch, 01. Oktober 2014 10:53 AM Als Antwort von Carl Cai Moderator markiert Dienstag, 30. Oktober 2014 06:02 Uhr ltquotegt wir müssen in Big Endian umwandeln, bevor wir es schicken und auch den Big Endian zum kleinen Endian umwandeln, nachdem wir empfangen haben die Daten. Ltquotegt Warum musst du es in Big Endian umwandeln, während im Transit irgendetwas im Transit sein muss, um diese Daten zu lesen oder zu verstehen. Bitte vergib mir, wenn dies meine völlige Unkenntnis dieses Themas zeigt. Leon Stanley - Dont bezahle den Fährmann - bis er dich auf die andere Seite bringt. Äh. Ich wende das den Gesellschaften an - nicht Gott. Bearbeitet von LeonCS Mittwoch, 01. Oktober 2014 09:24 Mittwoch, 01. Oktober 2014 9:15 AM Microsoft führt eine Online-Umfrage durch, um Ihre Meinung über die Msdn-Website zu verstehen. Wenn Sie sich für eine Teilnahme entscheiden, wird Ihnen die Online-Umfrage vorgestellt, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmenChanging the Endian Form der Binär-Numerischen Daten Dieses Beispiel veranschaulicht, wie man binäre numerische Daten in ein endian Formular konvertiert, dass eine Anwendung, die nicht mit LabVIEW erstellt wurde, lesen kann. LabVIEW speichert Zahlen in groß-endianer Form, mit dem höchstwertigen Byte zuerst im Speicher. Mac - und Sun-Anwendungen erwarten in der Regel, dass die Daten von groß-endianer Form sind, aber Windows-Anwendungen erwarten in der Regel eine kleine Endian-Form, mit dem am wenigsten signifikanten Byte zuerst. Infolgedessen müssen Sie für eine Windows-Anwendung, die ein Little-Endian-Formular erfordert, die Bytes in jeder Nummer explizit austauschen, nachdem Sie die Daten gelöscht haben oder bevor Sie die Daten unflatten. Wenn eine Windows-Anwendung nur zwei-Byte-Binärdaten benötigt, müssen Sie das erste Byte mit dem zweiten Byte in jeder Nummer tauschen, bevor Sie die Daten schreiben.160 Das Beispiel VI (angehängt) zeigt fünf verschiedene Methoden zum Konvertieren von Daten aus Big - Endian zu wenig-endian Form, oder umgekehrt. Anmerkung 160 Fließkommazahlen in LabVIEW sind IEEE-kompatibel und die Zielanwendung muss in der Lage sein, solche Nummern zu lesen. Einzel - und Doppelpräzisions-Gleitkommazahlen sind typischerweise entsprechend formatiert, aber erweiterte Präzisionszahlen, für die es mehrere Formate gibt, die nicht verwendet werden können. Weitere Informationen zu endian-Formularen finden Sie im Anwendungshinweis zur LabVIEW-Datenspeicherung (unten verknüpft). LabVIEW 7.1 und früher Wenn Sie die endianische Form von Daten ändern, verwenden Sie nicht die Option der LabVIEW Write File-Funktion, die automatisch einen Datei-Header schreibt. Dieser Header ist immer von groß-endianer Form. Stattdessen, wenn Sie einen Größen-Header benötigen, schreiben Sie es explizit, bevor Sie Daten in die Datei schreiben. Sie müssen das Format kennen, das die Zielanwendung erwartet. Zum Beispiel, während eine Anwendung eine Datei erkennt, die mit dem Schreiben an I16-Datei erstellt wurde, oder in SGL-Datei-Funktionen mit oder ohne Byte-Swapping schreiben, könnte es eine Art von Header erwarten, die diese VIs nicht liefern. Wenn Sie genau wissen, welches Format die Anwendung erwartet, verwenden Sie die entsprechenden Funktionen in LabVIEW, um eine solche Datei zu erstellen. Ich habe dies in Labview 7.1 ohne Schwierigkeiten geöffnet. Austauschen von gemischten Datentypen. - 11.12.2013 Von Dave Taylor, Hach Company. Die im Beispiel vi beschriebenen Methoden sind nützlich, wenn Sie einzelne Elemente oder Arrays eines einzelnen Typs austauschen. Aber wenn du einen gemischten Datentyp wie einen Cluster tauschen musst, wird das extrem klobig. Ein Weg, um dies zu behandeln (was sicherlich unelegant ist, aber ein Heck von viel schneller und automatischer) ist, den Cluster auf eine Binärdatei mit Big Endian zu schreiben und dann diese Binär zurück zu lesen, so wenig Endian. Um den Effekt dieses Prozesses zu sehen, schreibe deinen Eingabemuster in ein Array von U8, dann mach das gleiche mit den Daten, die du von dem kleinen Endian gelesen hast. Sie sehen, dass alle Multi-Byte-Datentypen vertauscht wurden. Von Nstor Uribe Patarroyo, INTA. Das herunterladbare Beispiel wird mit Labview 8.1 gespeichert und kann daher nicht mit früheren Versionen geöffnet werden. Inkompatibles Beispiel - 08.06.2006 Von Steve D, Smiths Aerospace. Das herunterladbare Beispiel funktioniert nicht (kann nicht einmal betrachtet werden) mit Labview 8.0 oder 7.1.Byte Order Im Computing werden zwei grundlegende Zahlendarstellungsschemata verwendet: Little-Endian und Big-Endian. Im Little-Endian-Schema werden Multi-Byte-Werte ab dem am wenigsten signifikanten Byte gespeichert, und umgekehrt im Big-Endian-Schema. Zum Beispiel wird der Doppelwort-Wert 0x12345678 von Little-Endian-Computer gespeichert wie: Und von Big-Endian-Computer wie: x86 und x64-Prozessoren verwenden Little-Endian-Codierung, während einige andere Prozessoren von Motorolla und IBM Big-Endian-Codierung verwenden. Hex-Editor Neo erlaubt Ihnen, die Byte-Reihenfolge für jedes Editor-Fenster einzeln zu ändern. Bitte beachten Sie, dass Änderungen nur in Wörtern, Doppelwörtern und Quadworth-Ansichtstypen sichtbar sind. Die Standard-Byte-Auftragsoption auf der Seite "Allgemeine Einstellungen" wird verwendet, um die Standard-Byte-Reihenfolge für neu geöffnete Editor-Fenster festzulegen. Um eine Byte-Reihenfolge für das geöffnete Fenster zu ändern, verwenden Sie die im Menü View Byte Order verfügbaren Befehle. Standardmäßig ist die CtrlE-Tastenkombination an den View Byte Order Little-Endian-Befehl gebunden, während die CtrlShiftE-Tastenkombination an den View Byte Order Big-Endian-Befehl gebunden ist. Effekt auf Floating-Point-Typen Floating-Point-Standard (IEEE 754) definiert keine exakte Codierung von Gleitkommadatentypen auf Little-Endian - und Big-Endian-Computern. Nach dem Standard sollte die Codierung nicht durch die Änderung der Byte-Reihenfolge beeinflusst werden, obwohl Floating-Point-Typen Bytes tatsächlich auf mehreren Big-Endian-Plattformen ausgetauscht werden. Hex-Editor Neo unterstützt Szenarien, bei denen Gleitkommertypen nicht von Big-Endian-Byte-Reihenfolge betroffen sind und wo Gleitkommertypen von der Änderung der Byte-Reihenfolge betroffen sind. Die Änderung der Byte-Reihenfolge beeinflusst die Option Gleitkommertypen auf der Seite "Allgemeine Einstellungen". Diese Option ist standardmäßig aktiviert. Dateninspektor - und Strukturbetrachter-Dateninspektor - und Struktur-Viewer-Module berücksichtigen auch die aktuelle Windows-Byte-Reihenfolge bei der Anzeige und Verarbeitung von Daten. Copyright 2014 HHD Software. Alle Rechte vorbehalten.

No comments:

Post a Comment