C语言中文件的操作

dulan2009 2010-08-31 11:31:02
大家好,我在C语言中打开一个文件,并想将其转换成BYTE进行处理,代码如下
typedef unsigned char BYTE;
FILE *f;
BYTE *fInBytes;

f = fopen("upper.tif", "r");
fInBytes = (BYTE *)f;

printf("The 1st value of the file is: %d and %d", *f, *fInBytes);
为什么输出的结果两个都是0?
我很肯定文件的第一个数值不为0,因为如下语句的输出

printf("the value: %d", fgetc(f));

为73。

这是何解? 坐等高人,小生先行谢过
...全文
131 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dulan2009 2010-08-31
  • 打赏
  • 举报
回复
严重感谢~~!!
birdthree 2010-08-31
  • 打赏
  • 举报
回复
fseek(f,199L,0) //将位置指针移到离首地址199个字节处
birdthree 2010-08-31
  • 打赏
  • 举报
回复
用fseek函数
birdthree 2010-08-31
  • 打赏
  • 举报
回复
所以这里 只能用 fgetc(f)这样封装过的方法来读取文件

代码 如6楼所示
dulan2009 2010-08-31
  • 打赏
  • 举报
回复
确实,如果我想任意定位文件的读取位置呢? 比如,我想读取该文件的第200个字节的值,我是不是必须先得用fgetc()读完前199个字节的值啊?
birdthree 2010-08-31
  • 打赏
  • 举报
回复
FILE *f;中的f只是一个指向结构体的指针,这里是文件指针,它并不是指向文件数据的首地址。

赵4老师 2010-08-31
  • 打赏
  • 举报
回复

#include <stdio.h>
typedef unsigned char BYTE;
FILE *f;
BYTE fInByte;
long offset;
void main() {
f = fopen("upper.tif", "rb");
if (NULL==f) {
printf("Can not open upper.tif\n");
} else {
offset=0;
whlie (1) {
fInBytes = fgetc(f);
if (EOF==fInByte) break;
printf("%08ld:%02x\n",offset,fInByte);
offset++;
}
fclose(f);
}
}
justkk 2010-08-31
  • 打赏
  • 举报
回复
搞这么麻烦?你的fgetc就是逐个字节读取的..
cougar0709 2010-08-31
  • 打赏
  • 举报
回复
你的输出是想输出什么结果?
函数用法可以参考:

#include <stdio.h>
#include <stdlib.h>

void main( void )
{
FILE *stream;
char buffer[81];
int i, ch;

/* Open file to read line from: */
if( (stream = fopen( "fgetc.c", "r" )) == NULL )
exit( 0 );

/* Read in first 80 characters and place them in "buffer": */
ch = fgetc( stream );
for( i=0; (i < 80 ) && ( feof( stream ) == 0 ); i++ )
{
buffer[i] = (char)ch;
ch = fgetc( stream );
}

/* Add null to end string */
buffer[i] = '\0';
printf( "%s\n", buffer );
fclose( stream );
}
dulan2009 2010-08-31
  • 打赏
  • 举报
回复
原来如此! 那我想要获得该文件的硬件地址,然后从该地址一个字节一个字节的进行处理,应该怎么办呢?
bingshanzhiling 2010-08-31
  • 打赏
  • 举报
回复
也就是说,前者是将FILE结构体中前4个字节输出了。后者是将FILE结构体中前1个字节输出了。
bingshanzhiling 2010-08-31
  • 打赏
  • 举报
回复
f和fInBytes都是指针,*f指向的第一个位置的level了吧。。。
看看这个
typedef struct {
short level; /* fill/empty level of buffer */
unsigned flags; /* File status flags */
char fd; /* File descriptor */
unsigned char hold; /* Ungetc char if no buffer */
short bsize; /* Buffer size */
unsigned char *buffer; /* Data transfer buffer */
unsigned char *curp; /* Current active pointer */
unsigned istemp; /* Temporary file indicator */
short token; /* Used for validity checking */
} FILE; /* This is the FILE object */

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧