在C中打开.dat文件

时间:2011-04-24 20:39:02

标签: c

我是一名新手程序员,只是对C中打开.dat文件有疑问。

我收到了朋友的.dat文件,这些是如何打开它的说明:

  

前4个字节包含一个整数   数字表示有多少   您可以扔掉的后续字节。   之后的字节包含ASCII   代码中的单个字母   信息。接下来的4个字节包含   你可以的垃圾字节数   扔掉,然后读下一个   字母等。中的最后一个字节   文件将是最后一个字母   消息。

我真的只是在寻找一种方法来查看文件的各个字节;在这一点上我很困惑......

3 个答案:

答案 0 :(得分:2)

您可以使用fread()从文件中读取字节,并fseek()寻找不同的位置(例如“扔掉字节”)。

但是,要解析第一个数字,您需要知道文件的字节顺序,除非它们实际上是4个表示数字的ascii字符;在这种情况下,您可以使用atoi()来获取数字。

以下是一些示例代码:

unsigned char buf[4];
FILE *fp = fopen("test.dat", "rb");
while(!feof(fp)) {
    fread(buf, 4, 1, fp); // read 4 bytes
    int throw_away = do_some_magic_to_get_the_number(buf);
    fseek(fp, throw_away, SEEK_CUR); // skip the given number of bytes
    fread(buf, 1, 1, fp); // read one byte
    // your character is now in buf[0]
}

答案 1 :(得分:0)

假设你在同一类型的机器上阅读它(即两者都是big-endian或两者都是little-endian),我可能会编写类似这样的代码:

uint32_t skip;

while (fread(&skip, sizeof(skip), 1, infile)) {
    fseek(infile, skip, SEEK_CUR);
    putchar(fgetc(infile));
}

如果您需要处理字节问题,我可能会在写入前对数据使用htonl,并在阅读后使用ntohl。然而,还有很多的备选方案 - XDR和ASN.1(仅举几个例子)是针对这样的工作的(不过,我应该补充说,这两者几乎肯定是过度的手头的任务)。

答案 2 :(得分:-1)

查看this文档,了解文件操作的工作原理。

unsigned char input buf[4]; 
FILE *fp = fopen("test.dat", "rb"); 
while(!feof(fp)) {   
  fread(buf, 4, 1, fp);   
  int skip_num = (int)buf; // should be able to cast since 4bytes = 1int and we have been told that this is an int.   
  for( ; skip_num >= 0; skip_num--) {}   
  fread(buf, 1, 1, fp); // This is the actual character do something with buf[0]. 
}