0

我正在努力制作一个像这样使用的宏:

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)

没有成功。有任何想法吗?

谢谢。

4

2 回答 2

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;
}
于 2013-04-17T10:01:12.727 回答
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 的输出符合预期:

$ ./a.out | hexdump -C
00000000  30 61 20 0a                                       |0a .|
于 2013-04-17T10:00:30.723 回答