Ich gehe jetzt einfach mal davon aus, daß Du - auch wenn das aus deinem Beitrag nicht unmittelbar zu entnehmen ist - aus einem Hex-String die Binärdarstellung ermitteln willst?
chris_1981_ hat geschrieben:Code: Alles auswählen
int u;
ins s;
f[] = "48";
u = ((f[0]>>4) & 0x0F);
s = (f[1] & 0x0F);
printf (" %i and %i \n", u, s);
Ausgabe: 3 and 8
Das Ergebnis hat hier nur zufälligerweise annähernd mit dem gewünschten zu tun.
chris_1981_ hat geschrieben:
Ich denke was ich dort mache ist völliger Schwachsinn.
Das denke ich leider auch

.
Nehmen wir mal auseinander, was Du da treibst.
Das nimmt die erste Ziffer aus dem Hex-String (das ASCII-Zeichen "4", entspricht in Binärdarstellung 52 = 0x34 = 0b00110100) und schiebst sie um vier Stellen nach rechts. Dabei kommt 0b00000011 = 3 raus.
Das ist zwar eine schöne Rechnung, hat aber überhaupt nichts mit dem zu tun, was Du erreichen willst - aus der "4" (ASCII) eine 4 (binär) zu machen.
Eine Hex-Ziffer ist ein Zeichen im ASCII-Code mit dem Wertebereich "0"-"9" (entspricht den ASCII-Codes 0x30-0x39 bzw. 40-49 dezimal) und "A"-"F" (entspricht den ASCII-Codes 0x41-0x46 (65-70 dezimal). Es geht jetzt also darum "0" - "9" (40 - 49) auf 0 - 9 und "A" - "F" (65 - 70) auf 10 - 15 abzubilden. Ich bastel' dir dazu mal eine kleine Funktion (die so natürlich nur für eine Ziffer funktioniert und denkbar umständlich ist, aber ich hoffe, daß das Prinzip so leichter zu verstehen ist):
Code: Alles auswählen
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int hex2bin(char c)
{
switch (c)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
return c - '0'; // man könnte hier natürlich auch "c - 40;" schreiben, aber so sieht man, was gemeint ist
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
return 10 + c - 'A'; // man könnte hier natürlich auch "10 + c - 65;" schreiben, aber so sieht man, was gemeint ist
break;
default:
fprintf(stderr, "%c ist keine Hex-Ziffer\n", c);
exit(1);
}
}
int main(int argc, char *argv[])
{
int i;
char f[] = "48FX";
for (i = 0; i < strlen(f); i++)
printf ("f[%d] = %i\n", i, hex2bin(f[i]));
}
Erst wenn das erledigt ist, kannst Du (wie Du ja ansatzweise schon versucht hast) aus den zwei 4-Bit Zahlen, die die Hex-Ziffern darstellen, eine 8-Bit Zahl "zusammenschieben".
It's as simple as that. And remember, Beethoven wrote his first symphony in C.