C++ 无法再次将 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)=(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
。
相关文章:
- HEX值到wchar_t字符(UTF-8)的转换
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 转换特殊字符(UTF-8)
- 将转换字符键入 int 以用作向量C++的索引
- 将字符随机转换为大写的函数
- 尝试将字符串/字符转换为整数会产生意外结果
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 转换字符时Arduino DUE 和 Arduino UNO 之间的区别
- 如何在C++中正确重载运算符转换字符*?
- 如何转换数据结构以在 c++ 中转换字符*
- 不兼容的转换字符
- 将转换字符数组[16]键入为int 128位
- 在c++中转换字符编码
- 使用递归转换字符
- 如何在Objective-C/C/C++中转换字符和字节的位置
- C++到Pep/8汇编语言的转换——字符数组
- 转换字符>十六进制