#include<iostream>
#include<fstream>
#define TRANSFORMS 4
#define BLOCK 4
using namespace std;
char* img=new char[128*128*TRANSFORMS];
int main(){
ifstream File;
File.open("ficdata");
int isize=128*TRANSFORMS*128;
int inc=TRANSFORMS*128;
int jsize=128*TRANSFORMS;
int i=0,j=0,temp;
while(!File.eof())
{
File>>temp;
img[i+j]=temp;
j+=TRANSFORMS;
if(j==jsize){
j=0;
i+=inc;
}
if(i==isize){
break;
}
}
for(int i=0;i<isize;i+=inc){
for(int j=0;j<jsize;j+=TRANSFORMS){
cout<<(int)img[i+j]<<" ";
}
}
}
在上面的代码片段中,该文件包含128 * 128个值,介于0-255之间。当我尝试将值回输到int并打印它们时,我得到一些值为正值,一些值为负值。为什么这样做发生了什么?int值被正确存储,只有在对它们进行类型转换时才会出现问题。
答案 0 :(得分:1)
char
具有实现定义的签名。在某些平台上,它与unsigned char
(通常为0 .. 255)具有相同的范围,在其他平台上,它与signed char
具有相同的范围(通常为-128 .. 127)。
显然,在您的系统上,它已签名,因此将值保存在127以上会产生负数。您可以通过将img
更改为unsigned char
来解决此问题。
此外,我没有理由看到动态分配img
。你可以做到
unsigned char img[128*128*TRANSFORMS];