2014-07-21 11 views
5

Ich habe ein 80 Element char Array und ich versuche, bestimmte Elemente zu einem integer und bekomme einige Zahlenfehler. Array-Element 40 in Hex ist 0xC0. Wenn ich versuche, es zu einem integer zuzuweisen bekomme ich in hex 0xFFFFC0, und ich weiß nicht warum.Konvertieren Element in Char-Array zu Int

char tempArray[80]; //Read in from file, with element 40 as 0xC0 
int tempInt = (int)tempArray[40]; //Output as 0xFFFFC0 instead of 0x0000C0 
+10

Weil '' 0XC0'' in '' char'' negativ ist und der Cast das Zeichen als '' int'' behält. – aruisdante

+1

'int tempInt = (int) tempArray [40];' -> 'unsigniertes tempInt = (unsigniertes) tempArray [40];' wird den Trick machen. – dasblinkenlight

Antwort

3

Dies ist so, weil char als Zahl mit Vorzeichen behandelt wird, und die Förderung zu int bewahrt die Zeichen. Ändern Sie das Array von char zu unsigned char, um es zu vermeiden.

3

Da 0XC0 negativ in char, und die Besetzung das Zeichen als int wird erhalten. Sie sollten unsigned char verwenden, wenn Sie die direkt Binärübersetzung oder als rein positiver Wert

14

Je nach Implementierung, ein char Typ in C++ halten wollen, ist entweder ein signed Typ oder ein unsigned Typ. (Der C++ - Standard schreibt vor, dass eine Implementierung eines der Schemata auswählt).

Um auf der sicheren Seite zu sein, verwenden Sie unsigned char in Ihrem Fall.

+1

Up-Vote für Sie, ich habe vergessen, dass es plattformabhängig sein könnte. – aruisdante

1

für mehr Komfort, verwende ich immer unsigned und signed immer vor der Deklaration und Gießen. in einem negativen int Wert führt, die usualyl in Zweierkomplement dargestellt wird, was zu einer sehr hohen Binärdarstellung

unsigned char tempArray[80]; //Read in from file, with element 40 as 0xC0 
unsigned int tempInt = (unsigned int)tempArray[40]; //Output as 0xFFFFC0 instead of 0x0000C0 
+0

Ihre Besetzung ist nicht notwendig und die Ausgabe ist 0xC0 nicht 0xFFFFC0 –

+0

Es könnte gut sein. Aber diese Art von Casting macht den Code lesbarer. – milaniez

0

char unterzeichnet werden kann, so die Umwandlung von einem negativen char Wert: Sie können die folgende schreiben.

Stattdessen entweder int tempInt = 0xFF & tempArray[40] verwenden, definieren TempArray als unsigned char oder gieße unsigned char: int tempInt = (unsigned char)tempArray[40] (nicht sicher, ob dieses Verhalten ist definiert).