C 将十六进制数传递给函数

C 将十六进制数传递给函数,c,C,通用条款4.4.2 c89 我在API头文件中有这些定义 /* Reason for releasing call */ #define UNASSIGNED_NUMBER 0x01 /* Number unassigned / unallocated */ #define NORMAL_CLEARING 0x10 /* Call dropped under normal conditions*/ #define CHANNEL_UNACCEPTABLE 0x06

通用条款4.4.2 c89

我在API头文件中有这些定义

/* Reason for releasing call */
#define UNASSIGNED_NUMBER      0x01  /* Number unassigned / unallocated */
#define NORMAL_CLEARING        0x10  /* Call dropped under normal conditions*/
#define CHANNEL_UNACCEPTABLE   0x06
#define USER_BUSY              0x11  /* End user is busy */
.
.
.
但是,我想将一个传递给函数,但我不确定类型。我可以传递一个整数值吗?release_call函数将其中一个作为其参数。但是,我不确定这些定义是否定义为十六进制符号

drop_and_release_call(23, 6); /* Dropping call for CHANNEL_UNACCEPTABLE */


uint32_t drop_and_release_call(uint32_t port_num, uint32_t reason)
{
    release_call(port_num, reason);
}

非常感谢您的建议,

0x06
6
(和
频道
)是等效的。
0x11
17
(和
USER\u BUSY
)也是如此。计算机没有十六进制和十进制的区别


(为了清楚起见,您应该编写
drop\u和\u release\u call(23,CHANNEL\u不可接受)

这些定义的原因是,您可以这样调用您的函数:

drop_and_release_call(23, CHANNEL_UNACCEPTABLE);
如果您确实想使用这些数字,可以直接传递:

drop_and_release_call(23, 0x06);

是的,您可以将其作为整数或无符号整数类型传入。这些名称由C预处理器替换,成为它们定义的数字。这些数字是有效的整数文本


通常将“枚举”类型(如端口号)设为无符号。还有标志。

是的,它只是一个整数


它的十六进制方面只有在显示给我们阅读时才重要。

C不关心它在代码中是以16为基数还是以10为基数。。。它将以整数的形式表示


只有在输入或输出过程中,您才真正需要担心基数

C编译器将把值解析为int。列出的值只需5位,就可以轻松地放入字符中。但在函数调用中,字符会被提升为int。无论如何,您也可以使用int。

如果需要区分,可以使用字符串。