[英]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.