Wie wandle ich zwei char Zeichen in eine int Zahl?

OP #715138
Lesenswert?

Hallo,
ich kämpfe jetzt schon einige Zeit mit diesem Problem, bekomm es aber 
einfach nicht hin. Ich habe ein unsigned char array, in welches aus dem 
FAT Table die nächsten Einträge gespeichert werden, z.B. falls kein 
weiterer Cluster mehr kommt steht an Stelle 0 im Array FF und an Stelle 
1 auch FF, nun würde ich gerne aus diesen zwei Zeichen zusammen (FFFF) 
eine int Zahl erzeugen, aber irgendwie bekomme ich immer nur 0 oder -1 
raus! Kann mir jemand eine Lösung für dieses Problem nennen?
#715146
Lesenswert?

Bernd Edlinger wrote:
> Hallo,
> ich kämpfe jetzt schon einige Zeit mit diesem Problem, bekomm es aber
> einfach nicht hin. Ich habe ein unsigned char array, in welches aus dem
> FAT Table die nächsten Einträge gespeichert werden, z.B. falls kein
> weiterer Cluster mehr kommt steht an Stelle 0 im Array FF und an Stelle
> 1 auch FF, nun würde ich gerne aus diesen zwei Zeichen zusammen (FFFF)
> eine int Zahl erzeugen, aber irgendwie bekomme ich immer nur 0 oder -1
> raus! Kann mir jemand eine Lösung für dieses Problem nennen?
"-1" ist doch schon mal nicht schlecht. Schließlich ist 0xffff als 
(signed) int die Darstellung für -1... Aber es wäre durchaus 
sachdienlich, wenn Du erzählen würdest, was Du bisher unternommen hast 
(Code...)
Gast #715153
Lesenswert?

>würde ich gerne aus diesen zwei Zeichen zusammen (FFFF)
>eine int Zahl erzeugen, aber irgendwie bekomme ich immer nur 0 oder -1
>raus!

Warum bist Du mit -1 nicht zufrieden? Das Bitmuster 0xFFFF repräsentiert 
doch als "16 bit signed integer" (Zweierkomplement) die Zahl -1. Als "16 
bit unsigned integer" wäre es 65535.  Wenn Du Null rauskriegst, ist es 
falsch.
#715163
Lesenswert?

Bernd Edlinger wrote:
> Hab es z.B. mal so probiert:
>
> uint32_t fat_entry;
>
> fat_entry = fat_ent[0] + (fat_ent[1] << 8);
>
>
> Liefert -1
Wenn fat_ent[] ein Array von chars ist, dann musst Du vor dem Schieben 
casten, sonst kannste auch direkt "0" da hinschreiben. Überleg mal, was 
passiert, wenn Du eine 8 Bit breite Variable um 8 Stellen nach links 
schiebst...
#715167
Lesenswert?

Bernd Edlinger wrote:
> Hab es z.B. mal so probiert:
>
> uint32_t fat_entry;
>
> fat_entry = fat_ent[0] + (fat_ent[1] << 8);
>
>
> Liefert -1

Das kann nicht -1 liefern, da fat_entry ein unsigned Typ
ist und als solcher über kein Vorzeichen verfügt. Dein
Fehler liegt in der Ausgaberoutine, mit der du dir den
Wert ansiehst.

Wenn du signed mit unsigned mischt, musst du höllisch
aufpassen, immer den richtigen Datentyp zu haben.

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