⑴ 使用hexmp 查看二進制文件
byte 1個位元組
short 2個位元組
char 2個位元組
int 4個位元組
long 8個位元組
float 4個位元組
double 8個位元組
有時候需要查看一些二進制文件的內容,比如二進制文件中包含的某些字元串。這個時候可以用hexmp工具看查看。
如果是尋找文本內容,則經常在後面用管道跟上grep命令:hexmp -C file_name |grep hellokitty
hexmp命令一般用來查看」二進制「文件的十六進制編碼,但實際上它的用途不止如此,手冊頁上的說法是「ascii, decimal, hexadecimal, octal mp「,這也就是本文標題為什麼要將」十六「給引起來的原因,而且它能查看任何文件,而不只限於二進制文件了。另外還有xxd和od也可以做類似的事情,但是我從未用過。在程序輸出二進制格式的文件時,常用hexmp來檢查輸出是否正確。當然也可以使用Windows上的UltraEdit32之類的工具查看文件的十六進制編碼,但linux上有現成的工具,何不拿來用呢。
常用參數
如果要看到較理想的結果,使用-C參數,顯示結果分為三列(文件偏移量、位元組的十六進制、ASCII字元)。
格式:hexmp -C binfile
-C 輸出規范的十六進制和ASCII碼。來自: [ http://man.linuxde.net/hexmp]
一般文件都不是太小,最好用less來配合一下。
格式:hexmp -C binfile | less
⑵ C語言 訪存二進制文件定位問題
1.打開模式要用r+(對於ASCII文件)或者rb+(對於二進制文件)
2.fseek()函數有三個參數,第一個是文件指針,第二個是偏移量,第三個是起始位置,第三個參數有三個可選項,分別是SEEK_SET(文件開頭),SEEK_CUR(當前位置),SEEK_END(文件結尾),feek()函數的作大耐用就是將文件指針指向滾漏春的文件讀寫位置搜宴設置為從起始位置起移動第二個參數表示的偏移量個位元組的位置,第二個參數可以是負數,表示向前移動。
3.你所說的情況,應該用fgetpos()函數和fsetpos()函數設置讀寫位置。請自行上網查找這兩個函數的使用說明。
⑶ C語言中,我將圖書信息用二進制保存在文件中,現在我想要打開查找其中的某一個怎麼實現
void deletebook()
{
FILE*fp;
念早 fp=fopen("tushu.txt","a+");
inti=0,n,flag=0;
charname[10];
printf("請輸入需刪除圖書名稱:");
scanf("%s",name);
for(i=0;i<=s;i++)
{
fseek(fp,i*sizeof(structBOOK),0);
if(strcmp(book[i].bookname,name)==0)
{
printf("******************************************************** ");
printf("* 圖書列表 * ");
printf("******************************************************** ");
printf("圖書序號 圖書名稱 圖書作者 是否借出 ");
printf("******************************************************** ");
printf("%d %s %s銀嫌%s ",book[i].booknum,&book[i].bookname,&book[i].bookcreat,&book[i].turefalse);
printf("******************************************************** ");
n=i;
仔搏雀 flag=1;
for(i=n;i<=s;i++)
{
book[i].booknum=book[i+1].booknum;
strcpy(book[i].bookname,book[i+1].bookname);
strcpy(book[i].bookcreat,book[i+1].bookcreat);
book[i].turefalse=book[i+1].turefalse;
fwrite(&book[i],sizeof(structBOOK),1,fp);
}
printf("該圖書記錄已刪除!");
}
}
if(flag==0)
{
printf("沒有該圖書相關記錄! ");
}
fclose(fp);
}
這個是我之前寫的,只是一個子函數哈!你在main裡面調用就 可以了!是沒有問題的
⑷ c語言用什麼函數讀取2進制文件內容
你怎麼輸出來的?
二進制如果以文本輸出自,自然會有很多亂碼。
你可以用"%x"格式輸出看看
char
a;
a=fgetc(fp1);
printf("%c",
a);/*這樣肯定有亂碼*/
printf("%x",
a);/*這樣就是16進制*/
⑸ C語言二進制文件的讀取問題
抄C語言中二進制文件的讀取要用fread和fwrite來實現。
fwrite()與fprintf()是不同的。
fwrite將寫入的數據作為文件的磁碟內容保存。fprintf將寫入的數據的每個字元所對應的ASCII碼作為文件的磁碟內容保存。fprintf做了一個轉換的工作。
當打開文件時,記事本會自動把文件的磁碟內容作為ASCII碼轉換成對應的字元,然後再顯示出來,即顯示的是文本內容而不是磁碟內容。
例如,用fwrite向文件寫入「65」時,文件的磁碟內容就是保存的65(磁碟上以二進製表示)。當用記事本打開文件時,記事本會讀到65,並把65看作一個ASCII碼,再把對應的字元「A」顯示出來。因此屏幕上看到的文本內容是「A」。
而用fprintf向文件寫入「65」時,文件的磁碟內容保存的是「6」和「5」這兩個字元對應的ASCII碼,分別是54和53。因此文件的磁碟內容是54和53。當用記事本打開文件時,記事本讀到54,就顯示出對應的「6」。再讀到53,就顯示出對應的「5」。
⑹ 怎麼對C語言中的文件進行內容添加,刪除,查找的操作
1、刪除文件部分內容的大概步驟:新建一個臨時文件,把原文件內容向臨時文件里拷貝,遇到要刪除的內容就跳過。結束後關閉文件,用remove("原文件名");把原文件刪除,用rename("臨時文件名","原文件名");把臨時文件名改為原文件名。
2、例如在原文件123.txt中刪除以2和以4編號開頭的行,可用以下代碼實現:
#include "stdio.h"
#include "stdlib.h"
int main(void){
FILE *fin,*ftp;
char a[1000];
fin=fopen("123.txt","r");//讀打開原文件123.txt
ftp=fopen("tmp.txt","w");//寫打開臨時文件tmp.txt
if(fin==NULL || ftp==NULL){
printf("Open the file failure...\n");
exit(0);
}
while(fgets(a,1000,fin))//從原文件讀取一行
if(a[0]!='2' && a[0]!='4')//檢驗是要刪除的行嗎?
fputs(a,ftp);//不是則將這一行寫入臨時文件tmp.txt
fclose(fin);
fclose(ftp);
remove("123.txt");//刪除原文件
rename("tmp.txt","123.txt");//將臨時文件名改為原文件名
return 0;
}
⑺ C語言:存儲很多商品數據的二進制文件從鍵盤輸入某種商品在文件中查找有無相應品名商品,求大神!!!!
初此兄看了一下,有兩個問題。
應該是if (fp == NULL)而不是if (fp = NULL)。
讀文件的4個fread語句格式要求嚴格,如果文件中不是20、12等這樣的間隔侍扒塵存儲,那就不能正確讀取,建議用fscanf之類的靈活函老禪數。
另:F函數的形參s有何用?
⑻ C語言二進制文件用記事本打開可以看到內容嗎
二進制文件中兄用記事本打開看可能出現亂碼、或者看不見內容,可以磨橋使用UltraEdit或者EditPlus、瞎培猛HexEdit這些程序查看。
⑼ c語言 dat文件如何查看他裡面的二進制數據啊
有保存的函數嗎,如果文件是以二進制模式打開保存的 那麼就fread掉第一個count之後循環fread一個結構體到p[i] 如果是文本的話用fscanf()格式化讀取到p[i]嘛
⑽ C語言中二進制文件中如何查找字元串,有具體函數么
二進制文件中哪有字元串這個概念?
補充:
可以用fseek移動指針位置,然後繼續讀取,原型如下
int fseek(FILE *stream, long offset, int fromwhere);