這是我第一次在C和UNIX系統上編程。我正在嘗試做相當簡單的事情。我有一個二進制文件,它是一張Compact Flash相機卡的圖像,由幾張JPG圖像組成。我試圖讀取文件,找到對應於FF D8 FF E0或FF D8 FF E1的字節序列,這是JPG文件開頭的符號,然後寫入該符號和下一個新jpg文件之間的所有內容。在C系統中讀取二進制文件(在UNIX系統上)(Ubuntu 10.10)
目前我只是試圖讓我的電腦按原樣打印出文件,通過讀取512個大小的塊,在原始文件系統中指定大小的塊。我有以下代碼:
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
int main (int argc, char *argv[])
{
FILE * raw;
FILE * currentimage;
char buf[512];
char beg1[32] = "11111111110110001111111111100001";
char beg2[32] = "11111111110110001111111111100000";
raw = fopen("card.raw", "rb");
while((fread(buf, sizeof(raw), 512, raw) > 0))
{
printf(buf);
printf("\n");
}
}
它只是打印出格式化成什麼樣我假定該文件是ASCII,所以它看起來像一堆官樣文章的。我怎樣才能將這些數據格式化爲二進制1和0或更好的十六進制0-F?
任何幫助將不勝感激。
P.S. beg1和beg2對應於我正在查找的十六進制值的二進制值,但它們與我目前的其餘代碼並不真正相關。
這是一切都很好,我猜,但我怎麼得到二進制或十六進制數據的表示,而不打印它,因爲我需要在數據寫入文件之前做比較?我實際上並不需要在此程序的最終版本中打印任何內容。 – joedillian 2010-11-15 00:20:17
@joedillian您已經擁有二進制數據,您可以將它讀入'buf'中,但是如果您想從原始SD卡圖像中提取這些數據,將會花費相當多的時間。該映像可能包含您必須解釋的文件系統。 – nos 2010-11-15 01:22:05