0

我是这个论坛的新手,所以请放轻松:)

我的代码中有以下内容

#define SYS_SBS     0x02 

每当我尝试使用它并尝试输出时,我都会得到 2 作为值,但是我想将 SYS_SBS 作为我的程序的输出。有没有办法,我可以做到这一点。

我无法控制源代码。我只需要输出 SYS_SBS。

附加细节:我无法更改某些头文件。但是我可以更改 .cpp 文件中的主要功能。我想要 SYS_SBS 作为输出。我正在使用卫星,对于接收器检测到的所有卫星,我必须输出它们是什么类型的卫星。在代码中,它们都是用这个十六进制数定义的。我只想输出 SYS_SBS 而不是 2

4

3 回答 3

9
#include <stdio.h>

#define SYS_SBS     0x02 
#define id(x) #x

int main(){
    printf("%s %d\n", id(SYS_SBS), SYS_SBS);
    return 0;
}
于 2013-07-15T12:47:18.673 回答
3

C 标准提供了一个字符串化运算符(在标记前添加 #),允许您输出特定标记。

不可能从变量的值向后转换为此标记名称,因为这在翻译过程中会丢失(正如其他人所提到的)。如果您需要这种转换,请考虑一个显式的“value2str”函数,它返回给定值的字符串表示:

const char *myType2str(int value)
{
    switch (value)
    {
        case SYS_SBS:
            return "SYS_SBS";

        default:
            return "UNKNOWN VALUE";
    }
}

编辑:根据一些评论,字符串化是标准的一部分。改变了那个。感谢您的提示。没有意识到这一点。

于 2013-07-15T12:47:38.293 回答
2

0x02中的十六进制表示。编译后,它只是一个数字 (2)。

如果您想将其打印为十六进制,那么,好吧...将其打印为十六进制(例如:使用格式化字符串"0x%.2x")。

好吧,您可以简单地:

printf("SYS_SBS");

但我假设你有一个数字作为“输入”(比如 2),并且想要输出字符串SYS_SBS,嗯,这不是直接可能的。您可以做的最好的事情是创建一个查找表,例如:

const char* sys_strings[] = { "SYS_EX", "SYS_TEM", "SYS_SBS" };
于 2013-07-15T12:45:49.167 回答