cuốn sách gpt4 ai đã làm

c++ - 检查原始文件 C++ 的输出

In lại Tác giả: Walker 123 更新时间:2023-11-28 08:13:18 25 4
mua khóa gpt4 Nike

您好,我正在读取一个十六进制格式的二进制文件。下面是一个图像文件,是在 Linux 上使用 hd ... |more 命令的前几行代码的简短示例。该图像是二进制图形,因此唯一的像素颜色是黑色或白色。这是一张 1024 x 1024 的图像,但大小为 2097152 字节

00000000 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 代表白色区域。另外,我如何计算出多少字节表示该图像中的一个像素。

câu trả lời hay nhất

của bạn printf() 是错误的。 %hd 表示short,而fileContents[i] 是一个ký tự;在我熟悉的所有现代系统上,这是一个大小不匹配。请改用 short 数组,因为字节数是像素数的两倍。

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

关于c++ - 检查原始文件 C++ 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8451145/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress