Monday 27 March 2017

0x39 In Binary Option

Ich unterrichtete C meinem jüngeren Bruder, der Technik studiert. Ich erklärte ihm, wie verschiedene Datentypen tatsächlich im Speicher gespeichert sind. Ich erklärte ihm die Logistik hinter unterzeichnet / unsigned Zahlen und Gleitkomma-Bit in Dezimalzahlen. Während ich ihm über char-Typ in C erzählte, nahm ich ihn auch durch das ASCII-Code-System und auch, wie char auch als 1-Byte-Nummer gespeichert ist. Er fragte mich, warum A ascii Code 65 gegeben worden ist und nichts anderes. Ebenso, warum a ist der Code 97 speziell. Warum theres eine Lücke von 6 ASCII-Codes zwischen dem Bereich der Großbuchstaben und Kleinbuchstaben. Ich hatte keine Ahnung davon. Können Sie mir helfen, dies zu verstehen, denn das hat mir auch eine große Neugierde geschaffen. Ich habe bisher noch kein Buch gefunden, das dieses Thema besprochen hat. Was ist der Grund dafür. Sind ASCII-Codes logisch organisiert Jul 16 09 at 8:23 Hier ist sehr detaillierte Geschichte und Beschreibung der ASCII-Codes: en. wikipedia. org/wiki/ASCII Kurz gesagt: ASCII basiert auf Teleprinter-Codierung Standards ersten 30 Zeichen sind nicht druckfähig - verwendet Für die Textformatierung werden sie dann mit druckbaren Zeichen fortgesetzt, etwa in der Reihenfolge, in der sie auf der Tastatur platziert werden. Überprüfen Sie Ihre Tastatur: Platz, Großbuchstaben Zeichen auf Anzahl Kappen. ,. Nummernschilder in der Regel am Ende der Tastatur Zeile mit Zahlen - Großbuchstaben Großbuchstaben, alphabetische Zeichen in der Regel am Ende der Tastatur Zeilen mit Buchstaben platziert - Großbuchstaben Kleinbuchstaben, alphabetische Zeichen in der Regel am Ende der Tastatur Zeilen mit Buchstaben niedergesetzt Der Code selbst war so strukturiert, dass die meisten Kontrollcodes zusammen waren und alle Grafikcodes zusammen waren. Die ersten beiden Spalten (32 Positionen) waren für Steuerzeichen reserviert.14 Das Leerzeichen musste vor der Grafik kommen, um Sortieralgorithmen einfach zu machen, so wurde es Position 0x20.15 Das Komitee entschied, dass es wichtig sei, Großbuchstaben mit 64 Zeichen zu unterstützen , Und entschied sich für die Strukturierung von ASCII, so dass es leicht zu einem brauchbaren 64-stelligen Satz von Grafikcodes reduziert werden konnte.16 Kleinbuchstaben wurden daher nicht mit Großbuchstaben verschachtelt. Um die Optionen für Kleinbuchstaben und andere Grafiken offen zu halten, wurden die speziellen und numerischen Codes vor den Buchstaben platziert, und der Buchstabe A wurde in die Position 0x41 gesetzt, um dem Entwurf der entsprechenden britischen Norm zu entsprechen.17 Die Ziffern 09 wurden so platziert Entsprechen Werten in binärer Präfix mit 011, so dass die Umwandlung mit binär-codierten Dezimal-Gerade. Beantwortet Jul 16 09 at 8:37 Ihre Antwort 2016 Stack Exchange, IncFun mit binären Ich weiß, was youre Denken hat er nur sagen, binäre Daten Wie, 1s und 0s Nun ja, ja, ich habe. Wenn youre wie ich, das letzte Mal, das Sie aktiv etwas mit geraden binären Daten tun musste, war in der Schule, als Sie lernten, wie man zwischen Binär-Hex in Dezimal und wieder zurück konvertieren. Ich könnte mir vorstellen, dass die meisten von uns in Hex ein wenig häufig laufen, aber dass wir nicht wirklich mit Binärdaten so oft umgehen müssen. Einige Hintergrund Auf einem meiner letzten Projekte, musste ich eine API, die mit einigen Hardware-Schnittstelle, die etwas relativ neu für mich war zu schreiben. Die meisten meiner Arbeit in der Vergangenheit war entweder Standard-Client-Seite GUI-Anwendungen oder Web-Anwendungen. Ich habe noch keine Anwendungen, die über eine serielle Schnittstelle sprechen geschrieben haben. Auch mit diesem neuen Projekt, ich didnt haben, über Ports zu sprechen, weil die Hardware hatte eine relativ schöne. NET SDK für sie. Der primäre Fehler mit dem SDK war, dass es noch ein paar Methoden, die nur zurückgegeben Byte-Arrays hatte. Die Dokumentation für diese Byte-Arrays wurde in einer Tabelle von Bits in anderen Worten angegeben, wenn das zweite Bit im vierten Byte eingeschaltet ist, dann ein Feature zugänglich ist, erhalten Sie die Idee. In vielen Fällen musste ich diese Bits zu analysieren, um festzustellen, was die Hardware tatsächlich zurückkehrte mich. Ich kann nicht Sie irgendeinen der Code zeigen, den ich in diesem Projekt verwendete, aber ich kann ein ähnliches Beispiel zur Verfügung stellen. Sie wissen, TCP, rechts Eines der Netzwerk-Protokolle, die wir jeden Tag nutzen, ohne auch nur zu denken Heres ein Bild aus Wikipedia, dass die Struktur für die TCP-Header (über Wikipedia) zeigt: Für Spaß, können wir davon ausgehen, dass die Weve bereitgestellt wurden, die unten Daten und Wed wie zu analysieren dies in eine Struktur, die mehr wie die Tabelle der TCP-Spezifikation sieht. (Für diejenigen, die neugierig sind, bekam ich diese Daten von Wireshark) Natürlich war ich nicht meine Bytes in einem so hübschen Format-Byte-Arrays werden sich viel mehr wie folgt aussehen: Die Naive (und schrecklich non-performant) Way My Der erste Schritt war, die Struktur dessen zu sehen, was ich verging. Im nicht wie jene Kerle in den Filmen - ich träume nicht im Binär und ich sure sehen nicht Struktur in den Einsen und in den Nullen. Also, ich wollte die Daten in ein tabellarisches Format zu bekommen. Um dies zu tun, war meine erste Station Powershell. Angesichts der oben genannten Byte-Array, war es nur die unten Snippet von Powershell (beachten Sie, dass ich das 0x-Präfix mit den hex-Werte gibt es keine binäre literale Notation): Nun, dass weve bekam ein Byte-Array, können wir damit beginnen, herum zu spielen es. Ich habe das folgende Skript namens Get-ByteTable. ps1: Grundsätzlich ist die Nutzung nur Bytes Get-ByteTable. ps1. Nun ist das Problem dann Ausgabe Formatierung, die nur Dumps die Liste der PSObjects aus und das Standardformat Format-Liste ist. Also, können Sie versuchen, Bytes Get-ByteTable. ps1 Format-Tabelle - AutoSize - Property. Das AutoSize-Flag informiert Powershell, so wenig Speicherplatz wie möglich zu verwenden, und das Property-Flag teilt Powershell mit, dass alle Eigenschaften als Spalten ausgegeben werden, wenn Sie dies nicht tun, wird Powershell nur einige Spalten ausgeben. Das Skript hat auch einen Parameter, wenn Sie die Zeilenlänge angeben möchten. Wenn Sie eher mit den Daten in etwas wie Excel arbeiten, könnten Sie die Ausgabe an Export-Csv. Schauen Sie sich die folgende Beispiel-Ausgabe: Wir können diese Tabelle verwenden, um unsere Werte mit dem, was wir sahen aus dem TCP-Header-Protokoll. Zum Beispiel bilden die Bits 0-15 unseren Quellport. In der Tabelle oben, kommen diese Bits zu 1101111000111001 oder 56889 in Dezimal. Dieses Zeilen mit, was wir in Wireshark sehen können, so arbeitet unser Skript wie erwartet. Die bessere (und mehr programmatische) Way Okay, so dass Powershell-Skript war lustig. Aber im Ernst, es war nicht der richtige Weg, um mit binären Daten umzugehen. Wir nahmen Bits (d. h. 0s und 1s) und wandelten sie in Hex, aber Hex als String um. Und dann haben wir es analysiert. Nicht nur war es nicht-performant, aber es war auch eine Explosion der Daten. Eine bessere Möglichkeit, binäre Daten zu analysieren, ist die Klasse System. Collections. BitArray. Es dauert in einem Byte-Array und präsentiert, dass Byte-Array als ein Array von booleans true ist 1, wie falsch ist 0. Ziemlich einfach. Nun ist die BitArray-Klasse nicht mit allen Mitteln der Arbeit mit den Daten in einem tabellarischen Format. Es ist nicht eine große Hürde, aber es war etwas, was ich wollte in der Lage zu tun, weil die Spezifikation, die ich zu tun hatte, zeigte die Bits in einer tabellarischen Struktur zu. Tatsächlich Behandlung das eine Array in einer tabellarischen Weise ist einfach (dh rowLength rowIndex columnIndex actualIndex) und wird am besten über Erweiterungsmethoden wie unten gezeigt serviert: Usage wäre dann: Im nicht besonders glücklich mit den Methodennamen und ich havent kommen mit einem großen Weg, um die Zeile Länge angeben, wie es jetzt steht, meine Erweiterungen verwenden die Zeilenlänge von 8 (BYTELENGTH). Ich denke, der beste Weg, um es zu behandeln wäre, um die BitArray-Klasse statt der tatsächlichen Verwendung von Erweiterung Methoden. Wer kennt Calc könnte das tun. Das letzte, was ich wollte zu teilen ist einige calc. exe awesomeness. Stellen Sie zunächst sicher, dass Sie calc. exe im Programmiermodus starten. Als nächstes können Sie im Dec (Dezimal) - Modus starten und 255 eingeben. Natürlich können Sie zwischen Dezimal, Hex, Oktal oder Binär ändern und die resultierenden Zahlen sehen. Das überraschte mich nicht. Beachten Sie jedoch den Abschnitt unterhalb der Zahlenanzeige, wo er die Binärzahl für Ihre Nummer anzeigt. Klicken Sie auf eines der Bits. Es ist toll. Es klappt das Bit für Sie Ich hatte keine Ahnung, calc könnte das tun Eines der Dinge, die ich mag über einige der Programmierer-Funktionen von Calc ist, dass Sie jetzt sehen können, was passiert, wenn Sie rechts oder links Shift Bits (Lsh und Rsh jeweils ). Es stellt sich heraus, es ist ein wirklich gutes Werkzeug für die visuelle Beobachtung Bit-Operationen. Nicht nur das, aber es ist auch gut zu helfen, Dinge wie Twos Komplement zu erklären. Eine gute Option für das Erstellen von Zeichenfolgen mit binären Daten zum Speichern (zum Beispiel Speichern einer SQL-Anweisung in einer Datei) in Textdateien oder PHP-Code ist, die folgenden Schritte durchzuführen : Ltphp Feld bin2hex (Feld) Feld chunksplit (Feld 2. x) Feld x. substr (Feld 0, - 2.) gt dies wird Ihr Feld (binär oder nicht) in hex umwandeln und dann die Hex in eine Zeichenfolge konvertieren, die in einer PHP-Datei platziert werden können: FFFFFFFF - gt xFFxFFxFFxFF Als Reaktion auf Patrik: Eine einfachere Weise, eine Zahl in binär zu drucken, ist, baseconvert () zu verwenden. Lt echo baseconvert (bin, 10, 2) gt Wenn Sie es brauchen, um alle 32 Bits (wie Ihre Funktion) zu drucken, können Sie es einfach aus: lt echo strpad (baseconvert (bin, 10, 2), 32, STRPADLEFT) gt Die Konvertierung erfolgt von Basis 10, da wenn bin an baseconvert () übergeben wird, wird es in einen String konvertiert und die Default-Darstellung ist dezimal. Hoffe das hilft. Einige gaben eine Funktion, um einen Hex-Code wieder in einen einfachen Text umwandeln (menschlich lesbar ASCII: P) Einige andere gab eine Funktion, die Nutzung von bin2hex zu konvertieren URLs in etwas wie 123456 Hier ist eine Funktion aus dem Formular 123456 zurück in gehen ASCII Beachten Sie, dass diese Funktion kann leicht um jede hex-Code in ASCII lt Funktion hex2text (str) str explode (str) arrayshift (str) nmlstr foreach (str als hexstr) nmlstr zu verwandeln geändert werden. Chr (baseconvert (hexstr, 16, 10)) return nmlstr gt hoffe, das hilft :) Grüße - Tsuna Hoffentlich hilft das jemandem. Es zeigt nur eine HTML-Darstellung von Hex-Daten, ähnlich wie ein Hex-Viewer würde. ltphp Funktion HexView (Daten) bytePosition columnlinecount 0 Spalten 8 dataLength strlen (Daten) return array () geben lttable border1 cellspacing0 cellpadding2gt für (n 0 n lt dataLength n) Zeilen linecount column substr (Daten. n. 1), wenn (column Spalten ) LineCount columnCount 0 foreach (Zeilen als Zeile) return lttrgtlttd alignrightgt. BytePosition. : Lt / tdgt für (n 0 n lt Spalten n) return lttdgt. Strtoupper (bin2hex (Zeile n)). lt / tdgt Rückkehr lttdgt ampnbspampnbspampnbspampnbspampnbspampnbspampnbspampnbsp lt / tdgt für (n 0 n lt Spalten n) return lttdgt. (htmlentities (Zeile n). htmlentities (Zeile n). ampnbsp). Lt / tdgt Rückkehr lt / trgt bytePosition bytePosition Spalten return lt / tablegt return implode (. Return) gt Diese Funktion löscht sie (konvertiert zurück in ASCII). Ltphp-Funktion hex2asc (myin) für (i 0 i lt strlen (myin) / 2 i) myout. Chr (baseconvert (substr (myin. I 2. 2), 16. 10)) return myout gt Ich war nur in den oben genannten und mit einer kleinen Änderung, kam mit den folgenden, die ich glaube, flexibler zu sein: ltphp-Funktion bin2hex (Daten) korrigiert eregreplace (0-9a-fA-F.. Daten) return Pack (H. strlen (korrigiert), korrigiert) gt Dadurch wird sichergestellt, dass das, was Sie weitergeben, auch wenn es an den Extremitäten oder zwischen Paaren aufgefüllt , Sollten die gewünschten Daten zurückgeben.


No comments:

Post a Comment