嗨我正在读取格式为十六进制的二进制文件。它是一个图像文件,下面是在Linux上使用hd ... | more命令的前几行代码的简短示例。图像是二进制图形,所以唯一的像素颜色是黑色或白色。它是一个1024×1024的图像,但尺寸为2097152字节检查原始文件的输出C++
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .......... ...... |
000dfbf0 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 ff 00 | ................ |
000dfc00 ff 00 ff 00 ff 00 00 00 00 00 00 00 00 00 00 00 | ................ |
000dfc10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ |
这是我使用在另一个线程发现阅读它的代码工作然而代码上SO
ifstream file (argv[1], ios::in | ios::binary | ios::ate);
ifstream::pos_type fileSize;
char* fileContents;
if(file.is_open())
{
fileSize = file.tellg();
fileContents = new char[fileSize];
file.seekg(0, ios::beg);
if(!file.read(fileContents, fileSize))
{
cout << "fail to read" << endl;
}
file.close();
cout << fileSize << endl;
当我运行for循环
for (i=0; i<2097152; i++)
printf("%hd",fileContents[i]);
唯一打印出来是零并且不是1。为什么这是我在printf中的参数没有正确指定像素大小。我知道一个事实,即图像中有1代表白色区域。另外我怎么弄出多少字节代表这个图像中的一个像素。
cout如何知道一次访问2个字节并将它们更改为十进制来表示像素值为1或0 – user1084113
@ user1084113:'cout'会知道,因为您将传递给它一个'short',而不是' char'。 'format()'把你传达的值的大小作为你传递的值的大小,并且你在说谎。 –