首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查原始文件C++的输出

检查原始文件C++的输出
EN

Stack Overflow用户
提问于 2011-12-09 20:11:08
回答 2查看 445关注 0票数 0

嗨,我正在读一个以十六进制格式的二进制文件。下面是一个图像文件,它是linux上使用hd .\\more命令的前几行代码的一个简短示例。图像是二值图形,因此唯一的像素颜色要么是黑色,要么是白色。它是一个1024乘1024的图像,但是大小是2097152字节。

00000000 00 00 00 000000.

000dff0 00 00 00 ff 00 ff 00 x.

000dfc00 ff 00 00 00 .

000dfc10 00 00 00 00 00 00 00 00 00

这是我在下面的另一个线程中读取它的代码

代码语言:javascript
运行
复制
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循环时,代码可以工作。

代码语言:javascript
运行
复制
for (i=0; i<2097152; i++)
 printf("%hd",fileContents[i]);

唯一打印出来的是零和1。为什么这是我在printf中没有正确指定像素大小的参数。我知道的一个事实是,图像中有1表示白色区域。另外,我如何计算出多少字节代表这个图像中的一个像素。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-09 20:33:01

你的printf()是错的。%hd的意思是short,而fileContents[i]char;在我熟悉的所有现代系统中,这都是一种大小不匹配。使用short数组代替,因为您有两倍于像素的字节。

另外,停止使用printf()并使用std::cout,避免所有类型不匹配的问题。

票数 1
EN

Stack Overflow用户

发布于 2011-12-09 20:24:14

由于2097152/1024正好是2048,这是在第2*1024,我假设每个像素是2个字节。

另一个问题可能在printf中。我不知道%hd是什么,我会亲自使用%02x并将数据转换为int

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8451145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档