我有一个有效的 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 的方法。有没有另一种有效的方法来做到这一点?
编辑:我想提一下,大多数人忽略的是我希望看到我的值被保留并转换为无符号整数十六进制格式。请注意,您可以将我的宏与左值一起使用float
,它会吐出正确的大端表示。大多数常规的十六进制转储例程将在写入内存时打印出这些位,这显然取决于字节序。我不清楚我的意思是什么。
无论如何,我最终编写了一组可与 r 值一起使用的重载函数。最后,我真的只是想在 32 位浮点数上使用它。
inline uint32_t tohex(float f) {
uint32_t* u = (uint32_t *)&f; return *u;
}