C++ 无法再次将 int 转换为字符到整数

c++ can't convert int to char to int again

本文关键字:转换 字符 整数 int C++      更新时间:2023-10-16

我主要有

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)=(255255255)。

    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标记为已签名,有些则标记为未签名。看起来您的已签名,因此要支持0-255的间隔,您需要使用unsigned char

char类型的范围为[-128;127],因此当您尝试将int(128)与char进行比较时,它将强制转换为char并成为char(-128)。您应该使用无符号字符。

我敢打赌,您的循环在127中运行良好,然后发生溢出。char是一种有符号的数据类型,当其高位被设置时,它被认为是负的。您应该在此处使用unsigned char