c ++不能再将int转换为char到int

时间:2016-03-22 14:36:08

标签: c++ debugging variables

主要我有

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

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

3 个答案:

答案 0 :(得分:2)

如果char是有符号或无符号类型,则标准中未指定。有些实现将char设置为signed,有些实现为unsigned。看起来你的是签名的,所以要支持0到255的间隔,你需要使用unsigned char

答案 1 :(得分:1)

字符类型有范围[-128; 127]所以当你试图将int(128)与char进行比较时,它会转换为char并成为char(-128)。你应该使用unsigned char。

答案 2 :(得分:1)

我敢打赌你的循环在127运行正常,然后溢出发生。 char是签名数据类型,当设置其高位时,它被视为负数。你应该在这里使用unsigned char