2009-04-20 13 views
2

Ich habe einen Satz von 6 Bits, die ein 7bit ASCII Zeichen darstellen. Wie kann ich den korrekten 7-Bit-ASCII-Code aus den 6 Bits erhalten, die ich habe? Einfach eine Null anhängen und ein bitweises ODER machen?C/C++: Wie konvertiert man 6bit ASCII in 7bit ASCII

Danke für Ihre Hilfe.

Lennart

+0

Sie müssen weitere Informationen bereitstellen. Woher kommen Ihre 6-Bit-Daten? (LabView vielleicht?) –

Antwort

8

ASCII ist von Natur aus ein 7-Bit-Zeichensatz, also, was Sie haben, ist nicht "6-Bit-ASCII". Welche Charaktere bilden deinen Charakter? Der einfachste Decodierung Ansatz ist wahrscheinlich so etwas wie:

char From6Bit(char c6) { 
    // array of all 64 characters that appear in your 6-bit set 
    static SixBitSet[] = { 'A', 'B', ... }; 
    return SixBitSet[ c6 ]; 
} 

Eine Fußnote: 6-Bit-Zeichensätze waren sehr beliebt auf alte Dezember Hardware, von denen einige, wie DEC-10, hatte eine 36-Bit-Architektur, bei den 6 -bit-Zeichen haben einen Sinn ergeben.

+1

Heh, vielleicht ist es das Gegenteil von ebenso nicht-standard "Extended ASCII", mit dem Titel "Contracted ASCII". – dreamlax

2

Sie müssen uns sagen, wie Ihr 6-Bit-Satz von Zeichen aussieht, ich glaube nicht, dass es einen Standard gibt.

Der einfachste Weg, um die umgekehrte Zuordnung zu tun, wahrscheinlich eine Lookup-Tabelle nur wäre zu verwenden, etwa so:

static const char sixToSeven[] = { ' ', 'A', 'B', ... }; 

Dies setzt voraus, dass der Raum als (binär) 000000 codiert ist, Kapital A als 000001 und bald.

Sie indexieren mit einem Ihrer 6-Bit-Zeichen in sixToSeven und erhalten das lokale 7-Bit-Zeichen zurück.

+1

Es gibt (waren) tatsächlich mehrere 6-Bit-Zeichen-Standards. DEC wurde erwähnt. Es gab sogar ursprünglich einen 5-Bit-Zeichencodierungsstandard: http://tamilelibrary.org/teli/history1.html –

0

Wenn ich Ihnen den Wert eines einzelnen Bits geben würde und ich behauptete, dass es aus Windows XP stammt, könnten Sie das gesamte Betriebssystem rekonstruieren?

Sie können nicht. Du hast Informationen verloren. Es gibt keine Möglichkeit, dies zu rekonstruieren, es sei denn, Sie haben etwas über wissen, was verloren ging. Wenn Sie das wissen, sagen wir, das höchstwertige Bit wurde abgeschnitten, dann können Sie das auf Null setzen, und Sie haben mindestens die Hälfte der Zeichen korrekt rekonstruiert.

Wenn Sie wissen, wie "a" und "z" in Ihrer 6-Bit-Kodierung dargestellt werden, können Sie möglicherweise abschätzen, was entfernt wurde, indem Sie sie mit ihren 7-Bit-Darstellungen vergleichen.

1

Der einzige aktuelle 6-Bit-Code, den ich kenne, ist base64. Dies verwendet vier druckbare 6-Bit-Zeichen zum Speichern von drei 8-Bit-Werten (6x4 = 8x3 = 24 Bit).

die 6-Bit-Werte werden aus den Zeichen gezeichnet:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/ 

, die die Werte 0 bis 63. Vier von diesen (etwa UGF4) verwendet werden, sind drei 8-Bit-Werte zu repräsentieren.

UGF4 = 010100 000110 000101 111000 
    = 01010000 01100001 01111000 
    = Pax 

Ist dies, wie Sie Ihre Daten codiert ist, gibt es viele Schnipsel um das wird Ihnen sagen, wie sie zu entschlüsseln (und viele Sprachen haben den Encoder und Decoder eingebaut oder in einer mitgelieferten Bibliothek). Wikipedia hat einen guten Artikel dafür here.

Wenn es nicht base64 ist, dann müssen Sie das Kodierungsschema herausfinden. Einige ältere Schemata verwendeten andere Suchmethoden der Shift-In/Shut-Out (SI/SO) -Codes zum Auswählen einer Seite innerhalb von Zeichensätzen, aber ich denke, dass eher erweiterte Zeichen (zB japanische DBCS-Zeichen) als normale ACSII-Zeichen ausgewählt wurden .

2

Ich kann mir nicht vorstellen, warum Sie alt werden DEC-10/20 SIXBIT, aber wenn das ist, was es ist, dann fügen Sie einfach 32 (dezimal). SIXBIT hat die ASCII-Zeichen beginnend mit Leerzeichen (32) genommen, also addiert einfach 32 zu dem SIXBIT-Zeichen, um das ASCII-Zeichen zu erhalten.

Verwandte Themen