我正在努力制作一个像这样使用的宏:
BYTE_AS_STRING(0A);
扩展为:
“\ X0A”
有可能吗?
到目前为止,我已经尝试过这个:
#define STEP2(a) #a
#define BYTE_AS_STRING(byte) STEP2(\x##byte)
和
#define STEP3(a) #a
#define STEP2(a, b) STEP3(\##a##b)
#define BYTE_AS_STRING(byte) STEP2(x, byte)
没有成功。有什么想法吗?
感谢。
答案 0 :(得分:1)
我要说的是,我赞同Joachim Pileborg的观点。
无论如何,这就是你需要的。您应该告诉cpp
将您的宏参数视为字符串。
#include <stdio.h>
#define BYTE_AS_STRING(x) "\\x" #x
int main(void) {
printf("print this : %s\n", BYTE_AS_STRING(0A));
return 0;
}
答案 1 :(得分:0)
这似乎有效:
#define S(a) #a
#define X(b) S(\x##b)
#define BYTE_AS_STRING(c) X(c)
#include <stdio.h>
int main(void)
{
printf("%02x %s", (int)(BYTE_AS_STRING(0A)[0]), BYTE_AS_STRING(0A));
}
预处理的:
// ...
int main(void)
{
printf("%x %s", (int)("\x0A"[0]), "\x0A");
}
Hexdump'ed输出符合预期:
$ ./a.out | hexdump -C
00000000 30 61 20 0a |0a .|