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
Da gibt es strtol oder sscanf. Es gibt auch ein (nichtstandard) atoi. bei manchen kannst du als dritten Paramter die Basis angeben.
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.
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...
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.
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.
Kilian K. schrieb: > Ich hoffe es kann mir hier jemand helfen? unsigned char value[]="\B1"; char buf[128]; sprintf(buf,"%02X",*value);
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
Kilian K. schrieb: > Aber das funktioniert doch schon nicht wenn ich z.B. "0xAB" habe... Warum nicht?
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.