簡體   English   中英

C ++無法將int轉換為char再次轉換為int

[英]c++ can't convert int to char to int again

我主要是

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,da)=(255,255,255)。

    char *RGBA = new char[4];

動態地為rgba顏色分配一個4字節的數組。

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

將來,Encode將進行實際編碼,但是現在它僅使RGBA = {p1,p1,da,da}

然后,如果RGBA [3]!= da(不應同時打印兩者)

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

如果char是有符號或無符號類型,則在Standard中未指定。 一些實現將char作為簽名,而一些實現為unsigned。 看起來您的已簽名,因此要支持0-255的間隔,您需要使用unsigned char

字符類型的范圍為[-128; 127],因此,當您嘗試將int(128)與char比較時,它會轉換為char並成為char(-128)。 您應該使用unsigned char。

我敢打賭,您的循環將運行到127,然后會發生溢出。 char是帶符號的數據類型,當其高位被設置時,它被視為負數。 您應該在這里使用unsigned char

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM