检查原始文件的输出
Examining Output of raw files C++
你好,我正在阅读十六进制格式的二进制文件。这是一个图像文件,下面是一个简短的例子,前几行代码使用hd…linux上的more命令。该图像是二进制图形,因此唯一的像素颜色不是黑色就是白色。它是一个1024 * 1024的图像但是大小是2097152字节
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000 dfbf000 00 00 00 00 00 00 00 00 00 00 00 ff 00 ff 00 |................|
000 dfc00ff 00 ff 00 ff 00 00 00 00 00 00 00 00 00 00 00 |................|
000 dfc1000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
这是我用来读取它在另一个线程中找到的代码
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]);
唯一打印出来的是0和没有1。为什么这是我的参数在printf没有正确指定像素大小。我知道图像中有代表白色区域的1。还有,我怎么知道有多少字节代表一个像素在这个图像。
您的printf()
是错误的。%hd
为short
, fileContents[i]
为char
;在我所熟悉的所有现代系统中,这是一个大小不匹配的问题。请使用short
数组,因为字节数是像素数的两倍。
同时,停止使用printf()
而使用std::cout
,避免所有类型不匹配的问题。
由于2097152/1024正好是2048,即2*1024,我假设每个像素是2字节。
另一个问题可能是在printf
。我不确定%hd
是什么,我会自己使用%02x
并将数据转换为int
。
- 有没有办法简单地从 GPU 调用多个 cpp 输出文件?
- VI工作室代码错误无法打开输出文件主.exe
- 在代码块中查找输出文件
- 将未签名的字符写入输出文件
- 为什么我的代码不写入输出文件?
- 完成搜索任务时为空输出文件
- 如何将地图<列表<string>、矢量<string>>输出到输出文件?
- 无法在代码块 IDE 中打开输出文件.exe
- C++:更改 IF 语句中的输出文件
- 编译 gsoap 输出文件 (onvif) 时出现问题
- C++击球平均值程序使用输入/输出文件打印名称,平均值,最高/最低平均值时遇到麻烦
- while 循环中的流输出文件() 通常生成空文件
- 如何使用 Docker 访问输出文件
- 提升进程间共享内存删除、权限和输出文件
- 查找素数,然后将质数放入输出文件中
- GDB / C++ - 根据循环条件将多个变量记录到输出文件中
- 带有文件结束函数的 while 循环重复输出文件中的最后一个数字两次
- 我的输出文件未显示解决方案
- 输入文件中的第一个字符是输出文件中的最后一个字符,反之亦然
- C++,我正在尝试创建一个有效的.bmp输出文件