我是新手程序员,只是有关于.dat文件中C.开幕打开.dat文件用C
我接到一个朋友.dat文件的一个问题,而这些人如何说明打开它:
前4个字节包含一个整数 数字,表示你可以有多少 后续字节扔掉。 之后的字节包含 消息中单个字母的ASCII 代码。接下来的4个字节包含 垃圾字节数,您可以丢弃 ,然后读取下一个 字母等。 文件中的最后一个字节将是 消息中的最后一个字母。
我真的只是在寻找一种方法来查看文件的单个字节;在这一点上,我很困惑...
我是新手程序员,只是有关于.dat文件中C.开幕打开.dat文件用C
我接到一个朋友.dat文件的一个问题,而这些人如何说明打开它:
前4个字节包含一个整数 数字,表示你可以有多少 后续字节扔掉。 之后的字节包含 消息中单个字母的ASCII 代码。接下来的4个字节包含 垃圾字节数,您可以丢弃 ,然后读取下一个 字母等。 文件中的最后一个字节将是 消息中的最后一个字母。
我真的只是在寻找一种方法来查看文件的单个字节;在这一点上,我很困惑...
您可以使用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]
}
几乎所有'while(!feof(fp))'的使用都是错误的(包括这个)。 – 2011-04-24 21:56:11
退房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].
}
你使用'while(!feof(fp))'是越野车。 – 2011-04-24 21:56:47
假设你在同类型的机器读这个,因为它是写在(即两者都是大端或两者都是小端),我可能会写的代码是这样的:
uint32_t skip;
while (fread(&skip, sizeof(skip), 1, infile)) {
fseek(infile, skip, SEEK_CUR);
putchar(fgetc(infile));
}
如果你需要处理的字节序的问题,我可能会使用的数据htonl
写之前,并在其上ntohl
看完后。然而,还有一些的替代品 - XDR和ASN.1(仅仅是一对夫妇)都是为这样的工作而设计的(尽管如此,我还要补充一点,这两项对于手头的任务而言几乎肯定是过度的) 。
正在做作业吗? – Zabba 2011-04-24 20:41:53
为什么你的“朋友”不能使用电子邮件? – 2011-04-24 20:43:25
defo是功课! – Damien 2011-04-24 20:43:52