主要我有
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;
}
答案 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
。