Строка:
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));