gpt4 book ai didi

C++ 文件 readInt 函数? (来自二进制文件)

转载 作者:太空狗 更新时间:2023-10-29 23:48:27 27 4
gpt4 key购买 nike

是否有一个 FILE (fopen?) 函数可以让我从二进制文件中读取一个整数?

到目前为止我正在尝试这个,但是我遇到了某种我看不到的错误,因为程序在没有告诉我的情况下崩溃了。

void opentest()
{
FILE *fp = fopen("dqmapt.mp", "r");
int i = 0;
int j = 0;
int k = 0;
int * buffer;
if (fp)
{
buffer = (int *) (sizeof(int));

i = (int) fread(buffer,1, (sizeof(int)), fp);
fscanf(fp, "%d", &j);
fclose(fp);
}

printf("%d\n", i);
printf("%d\n", j);
}

最佳答案

现在你已经改变了你的问题,让我问一个。您尝试读取的文件格式是什么?

对于二进制文件,打开文件的方式需要进行一些更改:

/* C way */
FILE *fp = fopen("text.bin", "rb"); /* note the b; this is a compound mode */

/* C++ way */
std::ifstream ifs("test.txt", ios::in | ios::binary);

阅读内容很容易。但请记住,您的文件开头有 2 个整数——宽度和高度,它们决定了要读取的数量,即另一个宽度 * 高度的整数数。所以,最好的办法是先读取前两个整数。您将需要使用两个缓冲区——一个用于宽度和高度,然后另一个缓冲区根据它们的值读取文件的其余部分。所以,让我们读入前两个整数:

char buf[ 2 * sizeof(int) ]; /* will store width and height */

读入两个整数:

/* C way */
fread(buf, sizeof(int), 2, fp); /* the syntax changes, FILE pointer is last */

/* C++ way*/
ifs.read(buf, sizeof buf);

现在,棘手的部分。您必须将这些东西转换为两倍。这又取决于您的系统字节顺序——简单的分配是否有效或是否需要字节交换。正如另一位发帖人指出的那样,WriteInt() 以大端格式写入整数。弄清楚你在什么系统上。然后您可以继续进行。

FILE 是一个 C 数据结构。它包含在 C++ 中以实现 C 兼容性。你可以这样做:

/* The C way */
#include <stdio.h>
#include <stdlib.h>

int main(void) {
FILE *fp = fopen("test.txt", "r");
int i = 0;
if (fp) {
fscanf(fp, "%d", &i);
fclose(fp);
}
printf("%d\n", i);
}

您可以使用std::ifstream 来打开文件进行读取。您必须使用其他一些咒语来读取文件内容,然后自己从中提取所需的信息。

/* The C++ way */
#include <fstream>
#include <iostream>

int main() {
std::ifstream ifs("test.txt");
int i = 0;
if (ifs.good()) {
ifs >> i;
}
std::cout << i << std::endl;
}

请注意,您也可以在 C++ 中使用 C 风格的函数,尽管这是最不推荐的方式:

/* The C way in C++ */
#include <cstdio>
#include <cstdlib>

int main() {
using namespace std;
FILE *fp = fopen("test.txt", "r");
int i = 0;
if (fp) {
fscanf(fp, "%d", &i);
fclose(fp);
}
printf("%d\n", i);
}

[注意:这两个示例都假设您有一个文本文件可供读取]

关于C++ 文件 readInt 函数? (来自二进制文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/599996/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com