Hallo alle zusammen, ich möchte gern eine Dezimalzahl (z.B. 12 ) in zwei 4 Bit Zahlen umrechnen. aber jetzt nicht das es so aussieht 00001100 = 12. Sondern: zehner Stellen | einer Stellen Dez 1 | 2 Bin 0001 | 0010 Zahl 65 Dez 6 | 5 Bin 0110 | 0101 und das ganze wieder zurück. Sprich, es werden 8 Bit ausgelesen und die ersten 4 Bits sind 10er und die letzten 4 Bits sind 1er stellen. Wie könnte man das Softwaretechnisch realisieren? Ich bedanke mich für eure Mühen und verbleibe mit freundlichen Grüßen Balou Baer
int einer, zehner, bin; einer=zahl%10; zehner=(zahl-einer)/10; bin=(zehner<<4)+einer; lg
IHR SEIT ECHT SPITZE!!!!! sofern es Funktioniert ;P DANKE!
:
Bearbeitet durch User
Noch eine Frage, wie kann ich die Zahlen Maskieren? Sprich, wenn die zehner nur zwischen 0 und 2 liegen kann und die einer zwischen 0 und 9? einer=zahl%10; zehner=(zahl-einer)/10; einer &= 9; zehner &= 2; bin=(zehner<<4)+einer; geht das so???? Danke für euere Hilfe Mit freundlichen Grüßen Balou Baer
müsste dir das helfen #define UBYTE (unsigned char) oder neudeutsch #define UBYTE uint8_t ???
1 | UBYTE bcdtoint( UBYTE bcd ) |
2 | { return ((UBYTE)(((bcd>>4)*10)+(bcd&15))); |
3 | }
|
4 | |
5 | UBYTE int2bcd( UBYTE integer ) |
6 | { return ((UBYTE)(((integer/10)<<4)+(integer%10))); |
7 | }
|
Joachim B. schrieb:
Das:
1 | return ((UBYTE)(((integer/10)<<4)+(integer%10))); |
habe ich verstanden und bereits vom Vorredner übernommen ;) DANKE EUCH! Was ich allerdings nicht richtig verstehe ist:
1 | return ((UBYTE)(((bcd>>4)*10)+(bcd&15))); |
bsp: 00100101 bcd>>10 -> verschiebe bcd 4 Bits nach rechts (aus 0010 | 0101 wird 0000 | 0010) richtig? 0010 entspricht der zahl 2 und diese wird mit 10 multipliziert was dann 20 macht. soweit richtig? was jetzt aber bcd&15 bedeutet verstehe ich nicht, bzw. dieses &15. Vielleicht könntest du mir das noch einmal erklären. Ich bedanke mich für deine Mühe und verbleibe Mit freundlichen Grüßen Balou Baer
Balou Baer schrieb: > was jetzt aber bcd&15 bedeutet verstehe ich nicht, bzw. dieses &15. Der Wert wird mit 00001111 maskiert, d.h. die oberen vier Bits sind anschließend 0000, so dass nur noch der Wert der unteren vier Bits wiedergegeben wird. 100100111 & 00001111 = 00000111 Allerdings ist das Grundlagenwissen bei der (C-)Programmierung...
:
Bearbeitet durch User
Danke das mit dem 0xF ^^ wäre in dem Fall wirklich besser gewesen ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.