Записать Hex в файл (не как ASCII) в C - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь записать файл с представлением шестнадцатеричных значений в C

примерно так:

char Msg[4] = {0x3f, 0x2a, 0x01, 0x52};

вывод, который я ищу в файл, выглядит следующим образом: "3f2a0152"

Я использовал fprintf для добавления текста перед шестнадцатеричным представлением, но не смог написать его успешно

FILE *LOG_FILE= fopen("./Hex.log", "a");
fprinf(LOG_FILE, "%d OUT %x", Timestamp, Msg);
fclose(LOG_FILE);

Любой совет?

1 Ответ

3 голосов
/ 25 сентября 2019

Строка:

fprintf(LOG_FILE, "%d OUT %x", Timestamp, Msg);

будет затухать Msg до указателя (адрес 0x3f) и затем печатать , что out.

Чтовам нужно вывести каждый элемент в виде двузначного шестнадцатеричного значения, например:

fprintf(LOG_FILE, "%d OUT %02x%02x%02x%02x\n", Timestamp, Msg[0], Msg[1], Msg[2], Msg[3]);

Кроме того, их, вероятно, следует указать как unsigned char, чтобы они не расширялись припереходя к fprintf.В противном случае вам придется сделать что-то ужасное, например:

fprintf(LOG_FILE, "%d OUT %02x%02x%02x%02x\n", Timestamp, (unsigned)(Msg[0]), 
    (unsigned)(Msg[1]), (unsigned)(Msg[2]), (unsigned)(Msg[3]));

Если вы хотите более общее решение, вы можете собрать для этого функцию, например:

void LogHex(FILE *fh, int tstamp, char *preamble, unsigned char *mem, size_t sz) {
    fprintf(fh, "%d %s", tstamp, preamble);
    for (size_t i = 0; i < sz; ++i) {
        fprintf(fh, "%02x", mem[i]);
    }
    fprintf(fh, "\n");
}
:
LogHex(LOG_FILE, Timestamp, "OUT ", Msg, sizeof(Msg));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...