Umwandlung eines unsigned short arrays in ein char array
-
Guten tag,
ich hoffe ich bin mit meinem anliegen hier im richtigen Bereich gelandetEs geht darum, von der Tastatur eine Zahlen-/Buchstabenkombination(Hex) in ein unsigned short array einzulesen und es anschließend in ein char array zu kopieren.
Bisher sieht mein Code so aus:
char eingabe[4]; printf("\nGeben Sie eine Hexzahl ein (maximal FFFF) "); scanf("%s",&eingabe);
Die Ausgabe mittels printf klappt auch einwandfrei:
printf("%s",eingabe);
Problem ist die Umwandlung in ein char array(neweingabe):
for(i=0;i<4;i++)neweingabe[i]=(char)eingabe[i];
Wenn ich beispielweise "FFF" im 1. Schritt eingelesen habe, kommt in dem Char array nur "FF" an
Wenn ich mir die einzelnen werte im unsigned short array anschaue, also:
printf("%c %c %c %c",eingabe[0],eingabe[1],eingabe[2],eingabe[3]);
steht dort auch nur unerwarteter "Müll" drin
Wie löse ich nun dieses Problem am einfachsten?
Hintergrund ist folgender, ich habe ein Programm geschrieben, was einen Hex Wert in ein char Array einließt und dieses dann verarbeitet (4 stellig hex, wird umgerechnet in binär und unterteilt in 4x4bit, anschließnde Wandlugn nach dezimal). Programm funktioniert wie gewünscht, aber nun habe ich in der Aufgabenstellung gelesen, dass die Eingabe (welche hier Sensorwerte simulieren soll) per unsigned short erfolgen soll.
-
Du hast ein völlig falsches Verständnis von dem was Hex, charArrays und C-Strings sind.
Welcher Typ ist eingabe. (Wie ist das definiert?)
ansonsten:
short wert; scanf("%x", &wert); printf("%X\n", wert);
-
Das ist auch eine Idee, habe garnciht dran gedacht den Hex Wert als Dezimal Zahl einzulesen.
Wollte den bisher nur so speichern wie dieser eingegeben wird.Werde es mal so Versuchen, also Eingabe(Hex)>Wandeln(Dezimal)>Wandeln(Hex)
total umständlich und geht sicher besser, aber so werde ich es erstmal testen
-
Unterscheide zwischen Darstellung und Wert einer Zahl! Die Darstellung einer Zahl ist ein Zeichenkette*, für Menschen (oder Computer) lesbar. Beispiele sind zum Beispiel die Dezimal- oder Hexadezimalschreibweise. Der Wert einer Zahl ist die logische Idee, das Konzept einer Zahl. Auf Ebene der Programmlogik hantierst du mit den Werten einer Zahl, wenn deine Datentypen Integer, float oder ähnliches sind. Darstellungen einer Zahl sind Zeichenketten. Die Integer, float & Co. haben keine spezielle Darstellung, es gibt keinen hexadezimalen Integer oder dezimale floats. Sie speichern den Wert einer Zahl**.
*: Oder die Anzahl Knoten auf einer Schnur, eine Kombination von elektrischen Strömen in einem Mikrochip, oder vieles andere. Ich will das Thema aber nicht überverkomplizieren.
**: Ganz tief auf der Hardwareebene hat man natürlich schon irgendwann eine Darstellung, dann eben als Strommuster in der Hardware. Aber die ganze Software verhält sich so, als würde man mit dem Wert einer Zahl umgehen.
-
Irgendwie scheint mein Wissensstand im Programmieren nicht auszureichen um euch folgen zu können. Problem ist trozdem gelöst.
Danke.mastergamer99 schrieb:
Werde es mal so Versuchen, also Eingabe(Hex)>Wandeln(Dezimal)>Wandeln(Hex)
-
mastergamer99 schrieb:
Problem ist trozdem gelöst.
Das dein Programm läuft, heisst noch lang nicht, dass es richtig ist.
char eingabe[4]; //Platz für 3 Zeichen + den Nullterminator '\0' printf("\nGeben Sie eine Hexzahl ein (maximal FFFF) "); // Hier vorderst du auf, 4 ZEichen einzugeben, obwohl nur für 4 Platz sind scanf("%s",&eingabe); // Das & ist überflüssig (und wenn eingabe ein Zeiger wäre auch verkehrt) // Was ist, wenn der freche User mehr als 3 Zeichen eingibt?
char eingabe[5]; printf("\nGeben Sie eine Hexzahl ein (maximal FFFF) "); scanf("%4s",eingabe);