2016-03-22 9 views
-1

In Haupt int i habenC++ nicht int konvertieren verkohlen wieder

int main() 
{ 
    int counter = 0; 
    int loop = 50; 
    for(int p1 =0; p1 <256; p1++){ 
    for(int p2 =0; p2 <256; p2++){ 
    for(int da =0; da <256; da++){ 

Will Schleife, bis (p1, p2, da) = (255,255,255).

char *RGBA = new char[4]; 

Dynamisch ein 4-Byte-Array für rgba Farbe zuordnen.

int Catch = Encode(p1, p2, da, RGBA); 
    if ((int)RGBA[3] != da) 
    { 
     cout << (int)RGBA[3] << " != " << da << endl; 
    } 

In Zukunft Encode wird tatsächlich kodieren, aber jetzt macht es nur RGBA = {p1, p1, da, da}

Dann, wenn RGBA [3]! = Da (was es nicht beide gedruckt werden soll)

counter += 1; 
    if(counter == loop) 
    { 
     cin.get(); 
     counter = 0; 
     delete[] RGBA; 
     RGBA = nullptr; 
    } 

    }}} 
    cin.get(); 
    return 0; 
} 

Mein Problem ist, dass, wenn ich führen sie den Code für die ersten 100 Schleifen es gut läuft, aber danach habe ich seltsame Ergebnisse wie erhalten:

-128 != 128 
-127 != 129 
-126 != 130 
-125 != 131 
-124 != 132 
-123 != 133 
-122 != 134 
-121 != 135 

In Encode:

int Encode(int Pas1, int Pas2,int Data, char to_Store[4]) 
{ 
    to_Store[0] = Pas1; 
    to_Store[1] = Pas2; 
    to_Store[2] = Data; 
    to_Store[3] = Data; 
    return 0; 
} 

Antwort

2

Im Standard ist nicht angegeben, wenn char ein signierter oder vorzeichenloser Typ ist. Einige Implementierungen haben ein char-Zeichen, einige sind nicht signiert. Sieht so aus, als ob Ihre Signatur signiert ist. Um das Intervall von 0 - 255 zu unterstützen, müssen Sie unsigned char verwenden.

1

char Typ Bereich ist [-128; 127] Wenn Sie also versuchen, int (128) mit char zu vergleichen, wird es in char umgewandelt und wird zu char (-128). Sie sollten unsigniertes Zeichen verwenden.

1

Ich wette, Ihre Schleife läuft gut durch 127, und dann passiert Überlauf. char ist ein vorzeichenbehafteter Datentyp, und wenn sein High-Bit gesetzt ist, wird es als negativ betrachtet. Sie sollten unsigned char hier verwenden.