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 に答える