В настоящее время я пытаюсь создать программу, которая манипулирует двоичным файлом, проанализированным из аргументов командной строки. Программа вводит двоичный файл (input.bin), копирует его в другой файл (output.bin) после вставки беззнакового int в начале выходного файла. Команда идет как например:C Проблемы с двоичной программой ввода-вывода
$./padder input.bin output.bin 50
Однако мой выход дает мне:
Source successfully written to destination after padding by 53
первый вопрос, который я имею что 53 не Int Я прошел в раздуть (вставить). Вторая проблема заключается в том, что после hexdumping как моего файла input.bin, так и моего файла output.bin они похожи, но не совсем то, что я хочу.
HexDump input.bin:
0000000 3231 3433 3635 3837 3039 000a
000000b
HexDump output.bin:
0000000 3231 3433 3635 3837 3039 000a 0000 0000
0000010 0000 0000 0000 0000 0000 0000 0000 0000
*
000002c
Может кто-нибудь дать мне некоторое представление? Я новичок в файл ввода/вывода и довольно новый, но не закаленный C. Любая помощь приветствуется
исходный код:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
int main(int argc, char *argv[]){
if(argc != 4){
printf("ERROR: INCORRECT AMOUNT OF ARGUMENTS!!!\n");
} else {
FILE *input = fopen(argv[1], "rb");
if(input == NULL){
perror("INPUT FILE OPEN");
exit(EXIT_FAILURE);
}
FILE *dest = fopen(argv[2], "wb");
if(dest == NULL){
perror("DEST FILE OPEN");
exit(EXIT_FAILURE);
}
unsigned int *pad_val = (unsigned int *)argv[3];
unsigned char *pad = (unsigned char *) pad_val;
size_t n, m;
unsigned char buff[4096];
do{
n = fread(buff, 1, sizeof buff, input);
if(n){
m = fwrite(buff, 4, n, dest);
rewind(dest);
m = fwrite(&pad, 1, n, dest);
} else {
m = 0;
}
} while((n > 0) && (n == m));
if(m){
perror("copy");
}
printf("Source successfully written to destination after padding by %u\n", *pad);
fclose(input);
fclose(dest);
}
return 0;
}
Подсказка: в ASCII '' 5'' имеет числовое значение '53'. – EOF