Chinaunix首页 | 论坛 | 博客
  • 博客访问: 728179
  • 博文数量: 134
  • 博客积分: 3207
  • 博客等级: 中校
  • 技术积分: 1995
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-01 20:47
文章分类

全部博文(134)

文章存档

2022年(1)

2020年(7)

2018年(2)

2016年(5)

2015年(14)

2014年(21)

2013年(3)

2012年(1)

2011年(15)

2010年(30)

2009年(35)

分类: LINUX

2010-12-06 17:41:25

从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。

  ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:
ASC码   00110101 00110110  00110111   00111000
 十进制码      5      6      7      8
这样的编码5678共占用4个字节。ASCII码文件可在屏幕上按字符显示, 例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。 由于是按字符显示,因此能读懂文件内容。
  二进制文件是按二进制的编码方式来存放文件的。 例如, 数5678的存储形式为: 00010110 00101110只占二个字节。二进制文件虽然也可在屏幕上显示, 但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。 输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。 因此也把这种文件称作“流式文件”。
 
 
#include
#include
#include
#include
int main()
{
 int i;
 int len;
 FILE *out;
 unsigned char in_str[128];
 unsigned char string[] = {0xFF, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0xFF, 0x0};
 memset(in_str, 0, 128);
 len = strlen(string);
 out = fopen("Test", "w+");
 fwrite(string, sizeof(unsigned char), len, out);
 fclose(out);
 out = fopen("Test", "r+");
 fread(in_str, sizeof(unsigned char), len, out);
 for(i = 0; i < len; i++)
  printf("%x ", in_str[i]);
 fclose(out);
 printf("\n");
 
 
 {
  memset(in_str, 0, 128);
  int fd;
  fd = open("PText", O_CREAT|O_RDWR, 0666);
  write(fd, string, len);
  close(fd);
  
  fd = open("PText", O_RDWR);
  read(fd, in_str, len);
  for(i = 0; i < len; i++)
   printf("%x ", in_str[i]);
  close(fd);
  printf("\n"); 
 }
 
 {
  out = fopen("TTest", "w+");
  for(i = 0; i < len; i++){
   fprintf(out, "0x%x ", string[i]);
  }
  fclose(out);
  
  memset(in_str, 0, 128);
  out = fopen("TTest", "r+");
  for(i = 0; i < len; i++){
   fscanf(out, "%x", &in_str[i]);
  }
  for(i = 0; i < len; i++)
   printf("%x ", in_str[i]);
  fclose(out);
  printf("\n"); 
 }
 
 return 0;
}
 
使用UltraEdit查看Test、PTest、TTest这三个文件,可以很明显的发现其中的不同。
Test和PTest是二进制文件,TTest就是文本文件。
 
阅读(2039) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~