für ein Programm muss ich mehrere Zeichen in ihrer dezimalen, hexadezimalen und binären Darstellung verarbeiten, also z.B.
‚A‘ = 65 = 1000001 = 0x41.
Umwandeln von char nach int macht C/C++ ja mittels casting von alleine, aber wie kann ich die anderen beiden Darstellungen realisieren? Gibt es dafür schon fertige Funktionen oder muss ich etwa den kompletten „Wandle die int-Zahl nach binär“-Algorithmus per Hand implementieren (dto. hex)?
Weiterhin muss ich dann auf jedes einzelne Bit zugreifen können, da ich sie verschieben und löschen muss.
die Aufgabe stellte sich mir im Rahmen meines Studium auch schon einmal. Seinerzeit verwendete ich untige Funktion um das Problem zu lsen. Die Krte die man schlucken musz ist halt, dasz die Binaerzahl aufgrund der Begrenzung von Long auch begrenzt ist. Die zweite Funktion hab ich eben im Usenet gefunden. Diese macht halt selbst gleich die Ausgabe (ich wei nicht, ob Du das willst) alternativ knnte man die Werte auch in einen int arry einspeisen.
die Umwandlung einer Dezimalzahl in eine Binärzahl gestaltet sich eigentlich ganz einfach.
Dazu benötigt man lediglich den Modulo und die Division durch 2.
Es entsteht also folgende Binärzahl (von unten nach oben!):
10010110
Test (von rechts nach links):
0*1 + 1*2 + 1*4 + 0*8 + 1*16 + 0*32 + 0*64 + 1*128 = 150
Abbruchkriterium ist also div/2 == 0 und der Rest gibt dir die nötige Binärstelle. Müsste eigentlich schnell programmiert sein.
Von Binär nach Hex kannst du dann auch auf eine einfache Regel zurückgreifen:
10010110 von oben lässt sich einfach so schreiben:
1001 0110
Dabei repräsentiert jedes Quadrupel (4Bit) eine Stelle der HexZahl.
für ein Programm muss ich mehrere Zeichen in ihrer dezimalen,
hexadezimalen und binären Darstellung verarbeiten, also z.B.
‚A‘ = 65 = 1000001 = 0x41.
Umwandeln von char nach int macht C/C++ ja mittels casting von
alleine, aber wie kann ich die anderen beiden Darstellungen
realisieren? Gibt es dafür schon fertige Funktionen oder muss
ich etwa den kompletten „Wandle die int-Zahl nach
binär“-Algorithmus per Hand implementieren (dto. hex)?
Weiterhin muss ich dann auf jedes einzelne Bit zugreifen
können, da ich sie verschieben und löschen muss.
;Vielleicht hat da jemand ein paar Tips?
HEX geht problemlos mit printf() oder sprintf(), bei manchen Compilern ist auch eine Binärausgabe möglich.
printf(„Hex: %X\n“, a);
selber programmiert:
#define BITS 16 /\* für 16-bit integers \*/
char \*int2bin(unsigned int a)
{
static char s[BITS+1];
int i;
for( i = BITS-1; i \>= 0; --i )
{
s[i] = ( (a & 0x1) == 0) ? '0' : '1';
a \>\>= 1;
}
s[BITS] = '\0'; /\* ende string \*/
return s;
}
/\* Diese Berechnung für NIBBLE stellt sicher, dass das \*/
/\* Ganze auch mit Bit-Zahlen, welche nicht durch 4 \*/
/\* Restlos teilbar sind funktioniert \*/
#define NIBBLE ((BITS+3) / 4)
char \*int2hex(unsigned int a)
{
static char s[NIBBLE+1];
int i;
int c;
for( i = NIBBLE-1; i \>= 0; --i)
{
/\* 4 Bit in ASCII wandeln \*/
c = (a & 0x0F) + '0';
/\* wenn c \> '9' -\> 'A' ... 'F' \*/
if ( c \> '9' ) c += 'A'-'9';
s[i] = (char) c;
a \>\>= 4;
}
s[BITS] = '\0'; /\* ende string \*/
return s;
}
Hab’s jetz nicht mit dem Compiler getestet, sollte aber so funktionieren.