Byte-Array to INT

Gast #4793228
Lesenswert?

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.
#4793241
Lesenswert?

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];
#4793244
Lesenswert?

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.
Gast #4793246
Lesenswert?

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
}
#4793305
Lesenswert?

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()
Gast #4793320
Lesenswert?

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.
#4793373
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren