PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 6bit Ascii durchgängig in Array schreiben



Marten83
12.10.2009, 12:08
Hallo Zusammen,

wie ich schon in einem anderen Post geschrieben habe will ich eine Struktur mit Variablen unterschiedlicher Bitbreiten per Pointer beschreiben.
Dabei will ich den Pointer an den Anfang der Struktur zeigen lassen, die Daten kopieren und den Zeiger um ein Byte erhöhen.

Meine Frage ist nun, kann ich irgendwie geschickt (und möglichst schnell) die 6bit ASCII nahtlos in ein Bytearray schreiben?
Oder bleibt mit tatsächlich nicht anderes übrig als das Arrays per Hand mit einer ewigen shifterei zu befüllen?

Was wäre wenn ich einen neuen Typ definiere mit 6bit?
wird dann ein entsprechender Pointer auch um 6 bit erhöht?

Vielen Dank!

MfG,

Marten83

cmock
12.10.2009, 12:16
nein, pointer zeigen immer mindestens auf bytes, du wirst schon schieben müssen...

cm.

Marten83
12.10.2009, 13:02
Ok, aber nur mal interessehalber....

Wenn ich das Array oder die Struktur in dem z.B. letzten Segment beschreibe und das dann shifte (nach links), kann man das so bewerkstelligen, dass der überlauf in das niedere Segment des Arrays überläuft?

Müsste doch eigentlich von sich aus funktionieren, oder?

cmock
12.10.2009, 13:42
wenn ich recht verstehe, was du meinst, ist die antwort "nein". du arbeitest ja auf einem byte (char oder uint8_t), da gibt's keinen zusammenhang mit dem "nachbarbyte" für den compiler.

du kannst natürlich diesen zusammenhang herstellen, indem du auf int oder long gehst, aber auch da shiften dir die bits ganz links raus und müssen irgendwohin, du hast das problem also nur verschoben und nicht gelöst.

du kannst dir aber zunutzemachen, daß 4 von deinen 6bit-chars in 3 8bit-chars passen, und immer aus 4 input-chars 3 im output machen. such mal nach code zum base64-dekodieren, da passiert genau das...

cm.

Marten83
12.10.2009, 16:25
Hattest recht, das macht der nicht.

Aber der Hinweis mit der base64 dekodierung ist echt gut.
Ich bin dabei das umzusetzten und werde dann (hoffentlich) über den Erfolg berichten.

Danke für den Hinweis!

MfG,
Marten83

thewulf00
12.10.2009, 17:00
Du könntest aber auch die 3 6-bitter in den ersten 6 bits der 3 Variablen schreiben und dann den restlichen 6-bitter auf die 3x2 freien bits verteilen. Geht vielleicht schneller, als eine base64-Kodierung.