2 Stimmen

Implementierung der Rücktaste für Zeichensätze mit 1 und 2 Byte Zeichen

Zeichensatz hat 1 und 2 Byte Zeichen. Ein-Byte-Zeichen haben 0 als erstes Bit. Sie können einfach sammeln die Zeichen in einem Puffer. Angenommen, der Benutzer gibt irgendwann eine Rücktaste ein, wie können Sie das Zeichen effizient entfernen.

Eine Lösung, die mir in den Sinn gekommen ist, ist, dass es keine Notwendigkeit, über ein Byte Zeichen denken (es hat 0 als höchstwertiges Bit) und nur müssen wir über 2 Byte Zeichen denken und wie es von 1 Byte Zeichen unterschieden werden könnte.Ich dachte an ein zusätzliches Bit (sagen wir 0) zu 2 Byte Zeichen, um es zu unterscheiden, aber das würde viele Zeichen Darstellungen zu essen.

eine Idee vorschlagen!

1voto

pmg Punkte 102904

Was meinen Sie mit dem ersten Teil?
In dem 2-Oktett-Wert 0xfade ( 0b1111101011011110 ) ist das erste Bit a 0 oder eine 1 ?

Sie können die Werte im Little-Endian- oder Big-Endian-Format schreiben lassen, so dass das "erste Bit" immer zuletzt geschrieben wird. Wenn Sie nur das letzte geschriebene Oktett untersuchen, wissen Sie, ob Sie 1 oder 2 Oktett löschen müssen.

0voto

tdenniston Punkte 3318

Klingt ein bisschen wie Hausaufgaben, aber...

Wenn man sie in einem Puffer sammelt, dann bedeutet ein "Backspace" nur, dass man den Schreibzeiger im Puffer nach hinten verschiebt (und möglicherweise ein NUL an den neuen Schreibkopf schreibt). Eine sehr einfache Implementierung ist diese:

On backspace:
  Move write pointer back one byte
  If MSB != 0:
    Move write pointer back one byte
  Write NUL at current position

Ist es das, wonach Sie gesucht haben?

0voto

zwol Punkte 128461

Erfinden Sie nicht Ihren eigenen Zeichensatz oder Ihre eigene Kodierung; verwenden Sie UTF-8. Dann ist es einfach, den Anfang des Zeichens vor dem Schreibzeiger zu finden (es ist das nächstgelegene Oktett, dessen zwei höchste Bits nicht 0x10 sind). Wohlgemerkt, dann können Zeichen sein länger als zwei Oktette, aber das ist ohnehin notwendig, denn es gibt mehr als 65.792 Zeichen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X