2013-12-11 71 views
0

我需要使用C來實現這個方法(https://en.wikipedia.org/wiki/Padding_%28cryptography%29#PKCS7),它沒有方便的功能來做到這一點。零填充:如何從文件結尾刪除零?

我加入這樣

int main() 
{ 
    FILE *file=fopen("1.xlsx", "a"); 

    file_add(16,file); 
    fclose(file); 
} 
void file_add(int SizeOfBlock, FILE *file) 
{ 
    fseek(file, 0, SEEK_END); 
    int size = ftell(file); // file size in bytes 
    fseek(file, 0, SEEK_SET); 

    int diff = size%SizeOfBlock; 

    char arr[16] = "0000000000000000"; //16 zeroes 
    fwrite(arr, SizeOfBlock-diff, 1 , file); // here I added to end of file missing 0 to make size of file be dividing to SizeOfBlock 

} 


void file_remove (int SizeOfBlock, FILE *file) 
{ 
    // by this function I need to delete these zeroes 
    // max amount of zeroes is limited by SizeOfBlock 
} 

我怎麼能這樣做? SizeOfBlock只能是8或16

+0

'0'不是'\ 0'。 – BLUEPIXY

+0

@Rocketq他意味着你的代碼將可打印的字符'0'(零,ascii值48)添加到文件的末尾,而不是實際的'NUL'字符。 –

+0

你想寫0作爲填充數字字符? – BLUEPIXY

回答

1

要截斷您可以使用下面的函數文件:

#include <unistd.h> 
int ftruncate(int fildes, off_t length); 
int truncate(const char *path, off_t length); 

由於ftruncate使用文件描述符,你必須使用filenoFILE結構得到該描述符。

ftruncate(fileno(file), length); 

如果新lenght,你指定的,比當前文件時間越長,該文件將增長,這可能有點missleading,cosnidering函數的名稱。所以它實際上也可以用來製作一個更大的文件,用\0填充它。