![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Veteran
![]() Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404
|
![]() das vorige posting war wohl ein wenig zu viel auf einmal ...
drum meine frage: wie kann ich zb einen datentyp int14 (also mit 14 bits) verwenden bzw erzeugen und auch in einen filestream schreiben? danke für eure hilfe |
![]() |
![]() |
![]() |
#2 |
Inventar
![]() Registriert seit: 24.01.2001
Beiträge: 5.631
|
![]() 16 bits verwenden, ansonsten das oberste Bit isolieren und 2 (bits) nach rechts schieben, den int16 Wert mit vierzehn gesetzten Bits (Maske) ver-und-en und das isolierte Bit 15 (=16.Bit=Vorzeichenbit), das bereits Bit 13 ist mit dem int16/int14 Wert ver-oder-n.
Um bitgenau in einen Filestream schreiben zu können, brauchst Du eine eigene Filestreamklasse, die die letzte Bitposition und das letzte Byte vorrätig hält als static Variable. Dann eben den int16 Wert übergeben, kopieren, die Kopie an die Bitposition des letzten gepufferten Bytes des Filestreams hängen (bitmäßiges ODER) sowie die zweite Hälfte (=1-2 Bytes, jedenfalls aus der Originalübergabevariable = der übergebene Parameter int16 bzw. int14) ebenso shiften und in den Filestreampuffer schreiben. Der Flush passiert dann sowieso, wenn ein Pufferüberlauf eintritt oder die Datei geschlossen wird. Das ist das Einzige, was ich sehe, wie es funktionieren müßte. |
![]() |
![]() |
![]() |
#3 |
Veteran
![]() Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404
|
![]() danke für die hilfe, werd mir das ganze mal durchüberlegen (müssen ...)
das mit der eigenen streamklasse kann ich wohl kaum verhindern, mein problem dabei ist, dass ich x verschiedene solche datentypen habe (angefangen von int27 über uint5 und so weiter) am besten wird sein, ich arbeite immer mit einem long (der sollte doch 4 byte haben so weit ich mich entsinne), damit ich zumindest einmal immer vom selben typ ausgehen kann ... |
![]() |
![]() |
![]() |
#4 |
Inventar
![]() Registriert seit: 24.01.2001
Beiträge: 5.631
|
![]() Der Datentyp intxy muß eine Struktur sein bestehend aus einem long oder longlong - nämlich dem Datenwert - und einem weiteren Feld - der Bitbreite mit Werten von 1 bis 64 - sowie einem Feld Signed, das lediglich True oder False sein kann.
|
![]() |
![]() |
![]() |
#5 | |
Hero
![]() |
![]() Zitat:
Solltest Du riesige Mengen an Daten abspeichern wollen, wäre es am einfachsten, später ein Komprimierungsprogramm (ZIP) drüberlaufen zu lassen.
____________________________________
Bibel |
|
![]() |
![]() |
![]() |
#6 |
Veteran
![]() Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404
|
![]() @flink
ich muss einen konverter schreiben, der ascii in ein binärformat convertiert - mit einem fixen protokoll, das dann über funk verschickt werden kann. darum die platzeinsparungen im protokoll und die komischen datentypen. ich bin dabei die sache zu lösen indem ich im programm selber mit normalen ints arbeite und das schreiben der datei einem eigenen stream überlasse, der weiss welches bit das letzte fix gesetzte ist. dort kann ich dann mit ein paar bitshifts und bitwise ors die neu hinzukommenden datenfelder anhängen und wenn der puffer voll ist, wird das file geschrieben ... |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|