導航:首頁 > 源碼編譯 > c語言在線編譯器位元組流

c語言在線編譯器位元組流

發布時間:2025-03-10 17:04:21

Ⅰ 用C語言簡單演示如何藉助zlib庫實現文件的壓縮解壓

問題的根源在於這些網友對於字元串和位元組流的概念非常的模糊,對文本文件和二進制文件的區別常常模稜兩可,其實位元組流可以表示所有的數據,二進制文件才是任何文件的本質。位元組流是一個位元組接一個位元組,並沒有結束符號,所以需要給它一個長度信息。二進制文件是一個位元組接一個位元組,並沒有換行符之類的。文件壓縮的時候,可以通過源文件的長度自動計算緩沖區的長度,壓縮後寫入目標文件之前,需先保留源文件和目標數據的長度作為解壓縮的依據,參考如下代碼:#include #include #include int main(int argc, char* argv[]) { FILE* file; uLong flen; unsigned char* fbuf = NULL; uLong clen; unsigned char* cbuf = NULL; /* 通過命令行參數將srcfile文件的數據壓縮後存放到dstfile文件中 */ if(argc < 3) { printf("Usage: zcdemo srcfile dstfile\n"); return -1; } if((file = fopen(argv[1], "rb")) == NULL) { printf("Can\'t open %s!\n", argv[1]); return -1; } /* 裝載源文件數據到緩沖區 */ fseek(file, 0L, SEEK_END); /* 跳到文件末尾 */ flen = ftell(file); /* 獲取文件長度 */ fseek(file, 0L, SEEK_SET); if((fbuf = (unsigned char*)malloc(sizeof(unsigned char) * flen)) == NULL) { printf("No enough memory!\n"); fclose(file); return -1; } fread(fbuf, sizeof(unsigned char), flen, file); /* 壓縮數據 */ clen = compressBound(flen); if((cbuf = (unsigned char*)malloc(sizeof(unsigned char) * clen)) == NULL) { printf("No enough memory!\n"); fclose(file); return -1; } if(compress(cbuf, &clen, fbuf, flen) != Z_OK) { printf("Compress %s failed!\n", argv[1]); return -1; } fclose(file); if((file = fopen(argv[2], "wb")) == NULL) { printf("Can\'t create %s!\n", argv[2]); return -1; } /* 保存壓縮後的數據到目標文件 */ fwrite(&flen, sizeof(uLong), 1, file); /* 寫入源文件長度 */ fwrite(&clen, sizeof(uLong), 1, file); /* 寫入目標數據長度 */ fwrite(cbuf, sizeof(unsigned char), clen, file); fclose(file); free(fbuf); free(cbuf); return 0; }文件解壓縮的時候,可以通過保留信息得到緩沖區和數據流的大小,這樣解壓縮後直接保存即可,參考如下代碼:#include #include #include int main(int argc, char* argv[]) { FILE* file; uLong flen; unsigned char* fbuf = NULL; uLong ulen; unsigned char* ubuf = NULL; /* 通過命令行參數將srcfile文件的數據解壓縮後存放到dstfile文件中 */ if(argc < 3) { printf("Usage: zudemo srcfile dstfile\n"); return -1; } if((file = fopen(argv[1], "rb")) == NULL) { printf("Can\'t open %s!\n", argv[1]); return -1; } /* 裝載源文件數據到緩沖區 */ fread(&ulen, sizeof(uLong), 1, file); /* 獲取緩沖區大小 */ fread(&flen, sizeof(uLong), 1, file); /* 獲取數據流大小 */ if((fbuf = (unsigned char*)malloc(sizeof(unsigned char) * flen)) == NULL) { printf("No enough memory!\n"); fclose(file); return -1; } fread(fbuf, sizeof(unsigned char), flen, file); /* 解壓縮數據 */ if((ubuf = (unsigned char*)malloc(sizeof(unsigned char) * ulen)) == NULL) { printf("No enough memory!\n"); fclose(file); return -1; } if(uncompress(ubuf, &ulen, fbuf, flen) != Z_OK) { printf("Uncompress %s failed!\n", argv[1]); return -1; } fclose(file); if((file = fopen(argv[2], "wb")) == NULL) { printf("Can\'t create %s!\n", argv[2]); return -1; } /* 保存解壓縮後的數據到目標文件 */ fwrite(ubuf, sizeof(unsigned char), ulen, file); fclose(file); free(fbuf); free(ubuf); return 0; }

Ⅱ C語言的char,short,int和long類型分別有多長

其長度分別為一位元組,至少兩位元組,至少兩位元組和至少4位元組。除此之外,不要再依賴任何約定。 char類型的長度被定義為一個8位位元組,這很簡單。short類型的長度至少為兩位元組。在有些計算機上,對於有些編譯程序,short類型的長度可能為4位元組,或者更長。 int類型是一個整數的「自然」大小,其長度至少為兩位元組,並且至少要和short類型一樣長。在16位計算機上,int類型的長度可能為兩位元組;在32位計算機上,可能為4位元組;當64位計算機流行起來後,int類型的長度可能會達到8位元組。這里說的都是「可能」,例如,早期的Motorala 68000是一種16/32位的混合型計算機,依賴於不同的命令行選項,一個68000編譯程序能產生兩位元組長或4位元組長的int類型。 long類型至少和int類型一樣長(因此,它也至少和short類型一樣長)。long類型的長度至少為4位元組。32位計算機上的編譯程序可能會使short,int和long類型的長度都為4位元組——也可能不會。 如果你需要一個4位元組長的整型變數,你不要想當然地以為int或long類型能滿足要求,而要用typedef把一種固有的類型(一種確實存在的類型)定義為你所需要的類型,並在它的前後加上相應的#ifdef指令: #ifdef FOUR_BYTE_LONG typedef long int4;#endif如果你需要把一個整型變數以位元組流的方式寫到文件中或網路上,然後再從不同的計算機上讀出來,你可能就會用到這樣的類型。 如果你需要一個兩位元組長的整型變數,你可能會遇到一些麻煩!因為並不一定有這樣的類型。但是,你總是可以把一個較小的值存放到一個由兩個char類型組成的數組中。

閱讀全文

與c語言在線編譯器位元組流相關的資料

熱點內容
程序員那麼可愛第30集免費看 瀏覽:637
如何下載老友麻將app 瀏覽:445
java路徑參數 瀏覽:592
php命名空間使用 瀏覽:298
app的競爭力如何寫 瀏覽:587
linux刪除swp 瀏覽:590
pdfxchange40 瀏覽:77
車牌號碼是哪個app 瀏覽:50
文件夾如何添加圓點 瀏覽:731
如何建立主索引命令 瀏覽:601
mac電腦怎麼打開終端命令 瀏覽:743
androidvpn待機不斷 瀏覽:758
硬碟的文件夾如何設置密碼 瀏覽:384
plc定位編程 瀏覽:49
mac命令添加用戶 瀏覽:817
android時間widget 瀏覽:395
qd128h壓縮機參數 瀏覽:290
用單片機測車距 瀏覽:398
去哪裡找加密的便簽 瀏覽:19
武漢訂酒店旅館哪個app平台好 瀏覽:115