egon schrieb:
> Das Problem war das noch in der Ausgabe zu berücksichtigen, wie holger
> schrieb. Jetzt geht es auch mit der Prefixtypkonversion, diese
> Schreibweise ist mir lieber weil auffälliger.
Noch lieber sollte dir sein
1 | uint64t mask = 0x80000000;
|
2 |
|
3 | for (uint8_t i = 0; i < 64; i++) {
|
4 | if ( a & mask ) {
|
5 | Serial.print("1");
|
6 | }
|
7 | else {
|
8 | Serial.print("0");
|
9 | }
|
10 | if (i%4 == 0 ) {
|
11 | Serial.print(" ");
|
12 | }
|
13 | mask >>= 1;
|
14 | }
|
die Operation
willst du mit einem variablen b auf einem AVR nicht haben, wenn du sie
vermeiden kannst. Die artet für den AVR nämlich in Schwerarbeit aus.
Noch besser wäre ein Schema, bei dem du dir Funktionen baust, die
aufeinander aufbauen, und letzten Endes einen uint64_t in Form von 8
Bytes ausgeben.
1 | void binaryNibble( uint8_t nibble )
|
2 | {
|
3 | if( nibble & 0x08 ) Serial.print("1"); else Serial.print("0");
|
4 | if( nibble & 0x04 ) Serial.print("1"); else Serial.print("0");
|
5 | if( nibble & 0x02 ) Serial.print("1"); else Serial.print("0");
|
6 | if( nibble & 0x01 ) Serial.print("1"); else Serial.print("0");
|
7 | }
|
8 |
|
9 | void binaryByte( uint8_t byte )
|
10 | {
|
11 | binaryNibble( byte >> 4 );
|
12 | Serial.print(" ");
|
13 | binaryNibble( byte );
|
14 | }
|
15 |
|
16 | void binaryWord( uint16_t word )
|
17 | {
|
18 | binaryByte( word >> 8 );
|
19 | Serial.print( " " );
|
20 | binaryByte( word );
|
21 | }
|
22 |
|
23 | void binaryDWord( uint32_t dWord )
|
24 | {
|
25 | binaryWord( dWord >> 16 );
|
26 | Serial.print( " " );
|
27 | binaryWord( dWord );
|
28 | }
|
29 |
|
30 | void binaryQWord( uint64_t qWord )
|
31 | {
|
32 | binaryDWord( qQWord >> 32 );
|
33 | Serial.print( " " );
|
34 | binaryDWord( qWord );
|
35 | }
|
so entsteht automatisch ein Satz von Funktionen, der für alle unsigned
int Datentypen die richtige Funktion bereit hält und zur Laufzeit mit
wenigen Schiebeoperationen auskommt, die dann auch noch alle vom
Compiler wegoptimiert werden können, indem er einfach immer nur den
relevanten 'Auszug' aus den Werten an die tiefer liegende Funktion
weitergibt.
(Die binaryNibble könnte man noch eleganter schreiben, ich belass es
aber erst mal bei dieser Version)