2016-03-22 3 views
-1

В основной у меня естьC++ не может преобразовать Int на символ в целое снова

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++){ 

будет цикл до (p1, p2, да) = (255,255,255).

char *RGBA = new char[4]; 

Dynamicaly alocate 4-байтовый массив для цвета rgba.

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

В будущем Encode будет фактической кодирования, но теперь он просто делает RGBA = {p1, p1, да, да}

Тогда если RGBA [3]! = Да (который не должен печатать как)

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

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

Моя проблема заключается в том, что, когда я запускаю код для первых 100 циклов он работает хорошо, но после того, что я получаю странные результаты, как:

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

В кодированию:

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

ответ

2

Он не указан в стандарте, если char является подписанным или неподписанным типом. Некоторые реализации имеют char как подписанный, некоторые - как unsigned. Похоже, ваш подписан, поэтому для поддержки интервала 0 - 255 вам необходимо использовать unsigned char.

1

символьного типа имеет диапазон [-128; 127], поэтому, когда вы пытаетесь сравнить int (128) с char, он приписывает char и becames char (-128). Вы должны использовать unsigned char.

1

Держу пари, ваша петля работает нормально через 127, а затем происходит переполнение. char - это тип данных, подписанный, и когда его высокий бит установлен, он считается отрицательным. Здесь вы должны использовать unsigned char.

Смежные вопросы