//檔案頭結構體
typedef
struct
bitmapfileheader;
函式如下:
/*
*返回值 :錯誤時返回-1,解析正確返回0
*/int
bmp_analyze
(unsigned
char
*path)
//讀取檔案頭資訊
read
(fd,
&fheader,
sizeof
(fheader));
printf
("bfsize:%ld\n"
, fheader.bfsize)
;printf
("bfoffbits:%ld\n"
, fheader.bfoffbits)
;//關閉開啟的檔案
close
(fd)
;return0;
}
執行結果如下:
顯示bfsize(檔案大小)為28,這顯然是不對的。根據winhex檢視可以看到,實際資料為0x36 0x20 0x1c 0x00,而在bmp檔案中資料儲存方式為小端模式(低位址存放低位元組),因此實際bfsize為1843254(0x1c2036
)個位元組。
下面開始查詢問題。
將讀取到的資訊都列印出來,分析原始資料。
int
bmp_analyze
(unsigned
char
*path)
//讀取檔案頭資訊
read
(fd,
&fheader,
sizeof
(fheader));
printf
("bfsize:%ld\n"
, fheader.bfsize)
;printf
("bfoffbits:%ld\n"
, fheader.bfoffbits)
;//將讀取到的資訊列印出來
for(i =
0; i <
sizeof
(fheader)
; i++
)printf
("\n");
//關閉開啟的檔案
這裡扯一下位元組對齊,以前也看了好多資料,總結一下就四點:
解決辦法:取消位元組對齊。
取消位元組對齊的兩種方法:
結構體定義於是被修改為了:
typedef
struct
__attribute__
((packed)
) bitmapfileheader;
原鏈結本來預設就取消了位元組對齊,但是一開始並不了解具體深意,於是就被我刪掉了,看來還是得加上。
除錯結果如下圖:
到這裡就顯示正常了,1843254就是0x1c2036,還有乙個問題是偽指令#pragma pack ()沒效果,不知道是gcc的問題還是什麼其他的問題。
嵌入式 linux 編譯
第二次換了編譯環境編譯時又提示 make 3 drivers video console vgacon.o 錯誤 1 在網上搜尋結果 根據資訊的大概意思是關於vga的支援問題,在這裡我直接把關於vga的配置選項去掉不選,即 在執行 make menuconfig 配置時 不選vga 驅動。devic...
linux嵌入式開發
我的環境 主機 ubuntu 64位 開發板 mini2440 6 makefile檔案修改 在 opt friendlyarm mini2440 linux 2.6.29下執行 sudo vi.makefile 搜尋arm linux得到乙個結果 cross compile?arm linux 然...
嵌入式 Linux介紹
嵌入式 linux介紹 一 嵌入式是一門it技術。嵌入式這門it技術是幹什麼的?他有什麼價值?專門生產功能專一的智慧型電子產品 電子裝置 什麼是電子裝置?通電的東西,嵌入式來搞定,而且沒通電的影象化介面屬於應用層的那種,嵌入式也可以搞定。二 嵌入式開發的分類 基於系統平台的開發 做出來的產品有搭載系...