在討論C語言文件操作之前,先了解一下與文件相關的東西。
一.文本文件和二進制文件
文本文件的定義:由若干行字符構成的計算機文件,存在於計算機系統中,通常在文件最後一行放置文件結束標識。文本文件只能存儲文件中的有效字符信息,不能存儲圖像、聲音等信息。狹義上的二進制文件則指除開文本文件之外的文件,如圖片、DOC文檔。
事實上,無論是上面所定義的文本文件還是二進制文件,在計算機中存儲都是以二進制的形式存儲的,因此其本質並沒有區別。所以廣義上的二進制文件便指所有的文件。至於為什麼在計算機內存儲的都是二進制數據,而給我們所呈現的確是文字、圖像等信息,這跟計算機硬件組成有關系,因為計算機裡面的元件是晶體管,其只有兩種穩定的狀態,因此二進制的0和1能表示其狀態。很多個晶體管的不同狀態的組合便呈現給我們不同的信息了。下面以漢字在計算機中的表示為例。
二.漢字在計算機中的表示
用計算機去處理漢字信息,必須對漢字進行編碼,變成能被計算機識別的二進制。漢字編碼主要有輸入碼、機內碼、字形碼三種。分別有不同的作用。
輸入碼:為了能直接使用西方英文標准鍵盤輸入漢字,必須制定相應的編碼規則,如拼音碼(拼音輸入法)、數字碼(數字輸入法)等
機內碼:指漢字在計算機內部的表示形式,即二進制形式,通常采用兩字節來表示一個漢字,每個字節的最高位設置為1(其值為負),如漢字“我”在計算機內的表示為11001110 11010010.
字形碼:存儲在計算機內的漢字需要在屏幕上顯示或者打印機上輸出時,需要知道漢字的字形信息,而漢字的機內碼並不能表示漢字的字形信息,因此需要專門的字形碼 。最通用的字形信息顯示采用點陣的形式,即將漢字的字形分解成若干個“點”形成的點陣。每個點有黑白兩種信息,有筆畫的用黑表示,反之用白表示。漢字的點陣信息量是很大的,比如16*16的點陣需要用256位表示其信息,則需要32字節的空間。
計算機中存放了所有漢字的字形碼組合起來的字形庫也稱字模庫,當漢字輸出或者顯示的時候由專門的字形檢索程序根據這個漢字的機內碼在字模庫中找出與之對應的字形碼,然後根據字形碼輸出到顯示設備上。
所以我們平常所看到的文本文件或者圖片等在計算機上都是以二進制形式存儲,只是在顯示的時候以人所能夠識別的方式呈現給我們。
測試程序
#include<stdio.h>#include<string.h>int main(void){ char s[]="我"; unsigned char *p=(unsigned char *)s; printf("%d\n",strlen(s)); printf("%X\n",*p); printf("%X\n",*(p+1)); return 0;}
輸出結果:
2
CE
D2
Press any key to continue
作者 海 子