У меня есть работающая функция hexdump, но она кажется излишней для печати одной переменной.Поэтому я пытаюсь сделать для этого макрос.Пока это работает почти идеально:
#define PRINT_FMT2(val,des,fmt) printf(#des" = "fmt": "SRC_STRN,val)
// SRC_STRN is a macro that evals to string literal containing file and line#
#include <stdint.h>
#define PRINT_HEX(x) PRINT_FMT2((*((uint32_t*)(&(x)))),x,"%x")
// the lack of parens around 2nd arg to PRINT_FMT2 is okay cause it gets #'d
Единственная проблема с этим состоит в том, что я не могу использовать его с возвращаемым значением функции.Я получаю ошибку lvalue required as unary '&' operand
.Я думаю, это означает, что я не могу использовать этот метод приведения ptr к uint-ptr.Есть ли еще один эффективный способ сделать это?
Редактировать : Я хотел бы отметить, что большинство людей не понимают, что я хочу, чтобы моя ценность была сохранена и преобразована вбеззнаковый int в шестнадцатеричном формате.Обратите внимание, что вы можете использовать мой макрос со значением l float
, и он выдает правильное представление с прямым порядком байтов.Большинство обычных процедур шестнадцатеричного дампа распечатывает биты так, как они записаны в памяти, что явно зависит от порядкового номера.Мой плохой за то, что я не понял, что я имел в виду.
В любом случае, я закончил тем, что написал набор перегруженных функций, которые можно использовать с r-значением.В конце концов, я просто хотел использовать его на 32-битных поплавках.
inline uint32_t tohex(float f) {
uint32_t* u = (uint32_t *)&f; return *u;
}