C++ 返回存储在char*中的int值(0-255)的类型将给出负值

C++ 返回存储在char*中的int值(0-255)的类型将给出负值,c++,C++,在上面的代码段中,该文件包含128*128个介于0-255之间的值。当我尝试将值键入回int并打印它们时,我会得到一些正值和一些负值。为什么会出现这种情况?int值存储正确,只有在键入回显时才会出现问题。char实现定义的签名。在某些平台上,它的范围与无符号字符(通常为0)相同。。255,在其他平台上,它的范围与带符号字符的范围相同,通常为-128。。127 显然,在您的系统上,它是有符号的,因此将值存储在127以上会导致负数。您可以通过将img更改为unsigned char来解决此问题 此外

在上面的代码段中,该文件包含128*128个介于0-255之间的值。当我尝试将值键入回int并打印它们时,我会得到一些正值和一些负值。为什么会出现这种情况?int值存储正确,只有在键入回显时才会出现问题。

char实现定义的签名。在某些平台上,它的范围与无符号字符(通常为0)相同。。255,在其他平台上,它的范围与带符号字符的范围相同,通常为-128。。127

显然,在您的系统上,它是有符号的,因此将值存储在127以上会导致负数。您可以通过将img更改为unsigned char来解决此问题

此外,我认为没有理由动态分配img。你可以这么做

#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]<<" ";
    }
}
}
为什么要使用new来分配静态全局数组?请阅读文件>>temp;将跳过空白,这可能不是二进制文件所需的,因为流不区分空白字符和相同值的二进制字节。
unsigned char img[128*128*TRANSFORMS];