Я борюсь с проблемой, которая требует, чтобы я выполнил шестнадцатеричный дамп в объектный файл, который я создал с помощью функции fopen ().
Я объявил необходимую целочисленную переменную (в HEX) следующим образом:
//Declare variables
int code = 0xCADE;
Вывод должен быть большим Endian, поэтому я поменял местами байты следующим образом:
//Swap bytes
int swapped = (code>>8) | (code<<8);
Затем я открыл файл для двоичного вывода следующим образом:
//Open file for binary writing
FILE *dest_file = fopen(filename, "wb");
Затем я записал код переменной (соответствующий 16-битному слову) в файл следующим образомusing fwrite ():
//Write out first word of header (0xCADE) to file
fwrite(&swapped, sizeof(int), 1, dest_file);
После компиляции, запуска и выполнения hexdump для файла, в который записано содержимое, я наблюдаю следующий вывод:
0000000 ca de ca 00
0000004
В основном, все правильно, вплоть до лишних "около 00".Я не уверен, почему это там, и нужно удалить его так, чтобы мой вывод был просто:
0000000 ca de
0000004
Я знаю, что проблема Endianness была решена широко в стеке, но после выполнения поиска, мне неясно, каккак классифицировать эту проблему.Как я могу подойти к этой проблеме, чтобы удалить «00»?
Большое спасибо.
РЕДАКТИРОВАТЬ:
Я изменил оба:
//Declare variables
int code = 0xCADE;
//Swap bytes
int swapped = (code>>8) | (code<<8);
to:
//Declare variables
unsigned short int code = 0xCADE;
//Swap bytes
unsigned short int swapped = (code>>8) | (code<<8);
И я наблюдаю:
0000000 ca de 00 00
0000004
, что приближает меня к тому, что мне нужно, но все еще есть дополнительное "00 00".Любая помощь приветствуется!