Hallo, ich erhalte über eine serielle Schnittstelle eine Integer-Zahl, diese wird Ziffer für Ziffer übertragen und in einem Byte-Array gespeichert. Dieses Byte-Array der einzelnen Ziffern möchte ich nun als eine Integer-Zahl zusammen setzen. Bsp: Es wird "1" "2" "3" übertragen. Gespeichert wird es im Array: Array[1] = 1 Array[2] = 2 Array[3] = 3 Dieses Array soll nach der Wandlung die Integer-Zahl 123 ergeben. Hat jemand eine Idee wie man das am besten macht.
Falls du in C programmierst: Denk daran, dass das erste Element von array[] die Nummer 0 hat. zahl = (array[0] - '0')*100 + (array[1] - '0') *10 + (array[2] - '0'); Das wäre das einfachste.
Byte-Array to INT schrieb: > ich erhalte über eine serielle Schnittstelle eine Integer-Zahl, diese > wird Ziffer für Ziffer übertragen und in einem Byte-Array gespeichert. Wie ist die Ziffer codiert? Wenn es ASCII-Zeichen sind hat das Georg ja schon geschrieben, aber wenn es BCD-Zahlen sind lass das "-'0'" einfach weg:
1 | zahl = array[0]*100 + array[1] *10 + array[2]; |
Also wenn es C oder c++ ist, dann ist doch das einfachste atio aus der STD lib. Ein Beispiel:
1 | int val; |
2 | char str[20]; |
3 | |
4 | strcpy(str, "98993489"); |
5 | val = atoi(str); |
6 | printf("String value = %s, Int value = %d\n", str, val); |
7 | |
8 | strcpy(str, "tutorialspoint.com"); |
9 | val = atoi(str); |
10 | printf("String value = %s, Int value = %d\n", str, val); |
und der Link zum Beispiel: https://www.tutorialspoint.com/c_standard_library/c_function_atoi.htm Bytes rein und den Rest macht die Lib.
Byte-Array to INT schrieb: > ich erhalte über eine serielle Schnittstelle eine Integer-Zahl, diese > wird Ziffer für Ziffer übertragen und in einem Byte-Array gespeichert. "Ziffer für Ziffer"? Bedeutet das die einzelnen Ziffern sind ASCII oder binär kodiert, oder noch was anderes? > Hat jemand eine Idee wie man das am besten macht. Ja, die gar nicht in dieses blöde Byte-Array speichern, sondern die Ziffern jeder Zahl abwarten und sie schrittweise in einem (unsigned) int oder (unsigned) long aufaddieren und multiplizieren:
1 | int ndx = 0; |
2 | int data[SIZE]; |
3 | |
4 | while(hasData() && ndx < SIZE) { |
5 | int n = 0; |
6 | int c; |
7 | while(nextDigit(&c)) { |
8 | // TODO Check for overflow
|
9 | n = (n * 10) + c; |
10 | }
|
11 | data[ndx++] = n; |
12 | }
|
Byte-Array to INT schrieb: > ich erhalte über eine serielle Schnittstelle eine Integer-Zahl, diese > wird Ziffer für Ziffer übertragen und in einem Byte-Array gespeichert. > Bsp: > Es wird "1" "2" "3" übertragen. Wenn etwas Ziffer für Ziffer - bzw. aus Sicht eines Computers eher Zeichen für Zeichen - ankommt, dann ist es kein Integer, sondern eine Zeichenkette. Bzw. englisch: ein String. > Dieses Byte-Array der einzelnen Ziffern möchte ich nun als eine > Integer-Zahl zusammen setzen. Ein Array, das Textzeichen enthält, ist ein String. Zumindest dann, wenn man in C programmiert. > Gespeichert wird es im Array: > Array[1] = 1 > Array[2] = 2 > Array[3] = 3 Wohl eher: Array[1] = '1' Array[2] = '2' Array[3] = '3' Außerdem verlangt C, daß am Ende eines Strings ein 0-Zeichen steht, als Kennzeichnung daß der String zu Ende ist: Array[4] = '\0' bzw. Array[4] = 0 Beachte dabei die Anführungszeichen! 0 ohne Anführungszeichen ist etwas anderes als '0'. Nochwas. C beginnt die Numerierung von Arrays mit 0. Also: Array[0] = '1' Array[1] = '2' Array[2] = '3' Array[3] = 0 > Dieses Array soll nach der Wandlung die Integer-Zahl 123 ergeben. > Hat jemand eine Idee wie man das am besten macht. Die Umwandlung von Zahlen zu Strings und umgekehrt ist in jeder Programmiersprache eine Standardaufgabe. In C gibt es sogar mehrere Möglichkeiten mit unterschiedlicher Mächtigkeit. Z.B. printf() / scanf(). Oder das Päärchen itoa() / atoi()
Alternativ kann man auch ne Programmierübung draus machen und sich ne Abfolge von arithmetischen und Shift-Operationen überlegen die die Zeichen wieder richtig zusammensetzt. Array[0] = '1' Array[1] = '2' Array[2] = '3' Array[3] = 0 Soll den Integer 123 ergeben nehme ich an. Die Hunderterstelle ist dann (’1’- 48)*100.
THOR schrieb: > Alternativ kann man auch ne Programmierübung draus machen Ja genau ..... oder man schreibt sich gleich (so zur Programmierübung) eine Funktion in Assembler weil man ja sonst nix zu tun hat.
Hochleistungsprogrammierer schrieb: > THOR schrieb: >> Alternativ kann man auch ne Programmierübung draus machen > > Ja genau ..... oder man schreibt sich gleich (so zur > Programmierübung) eine Funktion in Assembler weil man > ja sonst nix zu tun hat. Wie hast du Programmieren gelernt, indem du die libc auswendig gelernt hast?
THOR schrieb: > Hochleistungsprogrammierer schrieb: >> Ja genau ..... oder man schreibt sich gleich (so zur >> Programmierübung) eine Funktion in Assembler weil man >> ja sonst nix zu tun hat. > > Wie hast du Programmieren gelernt, indem du die libc auswendig gelernt > hast? Wie hast du programmieren gelernt? Indem du jeweils die Standardbibliothek nochmal selber geschrieben hast?
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.