Chango Geschrieben 23. September 2008 Teilen Geschrieben 23. September 2008 Hallo zusammen, ich bin absoluter Neuling beim C Programmieren. Darum wird meine Frage wahrscheinlich lächerlich sein aber ich bekomme es nicht hin. Ich habe eine Zahl im Format long 16Bit und nun möchte ich daraus zwei Int 8Bit umwandeln. Sprich in der Variable long h = 0x3D09 und das soll zu int h1=0x3D und int h2=0x09 werden. Vielen Dank im Voraus!!! Gruß Chango Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mephisto81 Geschrieben 23. September 2008 Teilen Geschrieben 23. September 2008 hallo, das Stichwort heißt "Bits maskieren". gruß mep Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Chango Geschrieben 23. September 2008 Autor Teilen Geschrieben 23. September 2008 Hallo Mephisto81, danke für den Tipp, aber dass war gar nicht nötig. :upps ich habe das einfach so gemacht: long int h; int h1, h2; h1 = h >> 8; h2 = h; Gruß Chango Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mephisto81 Geschrieben 23. September 2008 Teilen Geschrieben 23. September 2008 hallo, h2 = h; Soweit ich nicht irre wird hier der Wert einfach automatisch (sprichwörtlich vom generierten Code des Compilers) "abgeschnitten" - man möge mich dahingehend korrigieren wenn ich falsch liege (Klotzkopp? ) Welchen Compiler verwendest du? Bei meinem (GCC 4.2.3, Kubuntu 8.04) wird durch diesen Code auf jeden Fall ein fehlerhaftes Ergebnis erzeugt, welches durch ordentliche Bit-Maskierung nicht auftritt. gruß mep Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. September 2008 Teilen Geschrieben 23. September 2008 Soweit ich nicht irre wird hier der Wert einfach automatisch (sprichwörtlich vom generierten Code des Compilers) "abgeschnitten" - man möge mich dahingehend korrigieren wenn ich falsch liege (Klotzkopp? Bei vorzeichenlosen Typen hättest du Recht. Bei vorzeichenbehafteten Typen wie hier ist das "implementation-defined", wie der Standard das nennt. Ich würde das also eher mit unsigned long / unsigned int durchführen, um da auf der sicheren Seite zu sein. Sonst kann es sein, dass je nach Compiler da lustige Dinge mit dem Vorzeichenbit geschehen. Welchen Compiler verwendest du? Bei meinem (GCC 4.2.3, Kubuntu 8.04) wird durch diesen Code auf jeden Fall ein fehlerhaftes Ergebnis erzeugt, welches durch ordentliche Bit-Maskierung nicht auftritt.Der Code ist jedenfalls auf einen Compiler zugeschnitten, bei dem long 32 Bit hat, und int 16 Bit. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Chango Geschrieben 23. September 2008 Autor Teilen Geschrieben 23. September 2008 Hallo, ich programmiere mit ImageCraft ICCV7 AVR. Das Programm ist für einen uC und funktioniert soweit. Zumindest in der Simulation. Wie würdest du maskieren? h2 = h & 0x00ff; So oder wird das anderst gemacht. Ich versuch den Code so gut wie möglich zu schreiben. Gruß Chango Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mephisto81 Geschrieben 23. September 2008 Teilen Geschrieben 23. September 2008 hallo, Wie würdest du maskieren? h2 = h & 0x00ff; genau, so habe ich es in meinem Beispielprogramm auch gemacht - allerdings (wie Klotzkopp schon gesagt hat) muss man natürlich immer die jeweiligen Eigenschaften des Compilers beachten gruß mep Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.