Forum: Mikrocontroller und Digitale Elektronik Byte-Array to INT


von Byte-Array to INT (Gast)


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.

von Jürgen H. (nobody)


Lesenswert?

atoi wird dir helfen.

von Georg G. (df2au)


Lesenswert?

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.

von Dietrich L. (dietrichl)


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];

von Jürgen H. (nobody)


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.

von Jack (Gast)


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
}

von Axel S. (a-za-z0-9)


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()

von THOR (Gast)


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.

von Hochleistungsprogrammierer (Gast)


Lesenswert?

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.

von THOR (Gast)


Lesenswert?

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?

von Axel S. (a-za-z0-9)


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?

von Wilhelm M. (wimalopaan)


Lesenswert?

In welchem Zahlsystem denn? dezimal, quintal, nonal?

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.