Forum: PC-Programmierung char* in byte (hex) umwandeln


von Kilian K. (kellermaaan)


Lesenswert?

Hallo zusammen,
ich habe momentan ein kleines Problem und komme irgendwie nicht auf die 
Lösung...
Ich möchte gerne ein char* in ein byte umwandeln. Momentan habe ich z.B. 
in einem char* ein "b1" gespeichert und das hätte ich gerne in einem 
byte aber als HEX -> "0xb1". Nur leider stehe ich momentan bisschen auf 
dem Schlauch.

Ich hoffe es kann mir hier jemand helfen?

Mfg Kilian

von Dirk B. (dirkb2)


Lesenswert?

Da gibt es strtol oder sscanf.

Es gibt auch ein (nichtstandard) atoi. bei manchen kannst du als dritten 
Paramter die Basis angeben.

von Dirk B. (dirkb2)


Lesenswert?

Und, im Byte spielt die Darstellung (hex, dezimal, binär) keine Rolle 
mehr.
Das ist einfach nur ein Wert.

Mit "" werden i.A String gekennzeichnet. Also meist Text, der 
menschlesbar sein soll.
Dafür brauchst du dann wieder einen Zahlendarstellung.

von Kilian K. (kellermaaan)


Lesenswert?

Danke erstmal für deine Hilfe! Aber so richtig auf die Sprünge hilft es 
mir leider nicht. Die meisten Funktionen sind nur für char ausgelegt und 
atoi ist doch nur die Umwandlung in ein int...

von Peter II (Gast)


Lesenswert?

Kilian K. schrieb:
> ist doch nur die Umwandlung in ein int...

und genau das willst du doch.

ein Byte ist auch immer eine int zahl, auch wenn die Darstellung 0x12 
ist.

von Kilian K. (kellermaaan)


Lesenswert?

Aber das funktioniert doch schon nicht wenn ich z.B. "0xAB" habe...

Mein Vorhaben ist, der Benutzer muss ganz am Anfang über eine Webseite 
die MAC-Adresse ändern. Die Daten bekomme ich dann als String und möchte 
das dann in einem byte Array speichern damit ich die Mac dann in einem 
EEPROM sichern kann.

von MaWin (Gast)


Lesenswert?

Kilian K. schrieb:
> Ich hoffe es kann mir hier jemand helfen?

unsigned char value[]="\B1";
char buf[128];

sprintf(buf,"%02X",*value);

von Dirk B. (dirkb2)


Lesenswert?

Meinst du so?
1
char mac_s[] = "11:22:33:44:55:AA";
2
3
unsigned char mac_a[6];
4
5
sscanf(mac_string,"%hh2x:%hh2x:%hh2x:%hh2x:%hh2x:%hh2x", mac_a, mac_a+1, mac_a+2, mac_a+3, mac_a+4, mac_a+5 );
oder
1
char mac_s[] = "11:22:33:44:55:AA";
2
3
unsigned char mac_a[6];
4
5
  mac_a[0] = strtoul(mac_s,NULL,16);
6
  mac_a[1] = strtoul(mac_s+3,NULL,16);
7
....
Beim zweiten Beispiel kannst du auch mit dem endptr-Parameter von 
strtoul arbeiten

Ein bischen Fehlerbehandlung gehört aber noch dazu.

Z.B. Auswertung des Rückgabewertes von sscanf oder schauen ob endptr auf 
einen ':' zeigt.

: Bearbeitet durch User
von Rolf M. (rmagnus)


Lesenswert?

Kilian K. schrieb:
> Aber das funktioniert doch schon nicht wenn ich z.B. "0xAB" habe...

Warum nicht?

von Kilian K. (kellermaaan)


Lesenswert?

Dirk B. schrieb:
> oderchar mac_s[] = "11:22:33:44:55:AA";
>
> unsigned char mac_a[6];
>
>   mac_a[0] = strtoul(mac_s,NULL,16);
>   mac_a[1] = strtoul(mac_s+3,NULL,16);
> ....
> Beim zweiten Beispiel kannst du auch mit dem endptr-Parameter von
> strtoul arbeiten
>
> Ein bischen Fehlerbehandlung gehört aber noch dazu.
>
> Z.B. Auswertung des Rückgabewertes von sscanf oder schauen ob endptr auf
> einen ':' zeigt.

Ich danke dir, so habe ich es gelöst bekommen!

von Mark B. (markbrandis)


Lesenswert?

Kilian K. schrieb:
> Mein Vorhaben ist, der Benutzer muss ganz am Anfang über eine Webseite
> die MAC-Adresse ändern.

Sieht zumindest auf den ersten Blick nicht nach einem hochgradig 
sinnvollen Anwendungsfall aus.

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
Noch kein Account? Hier anmelden.