将十六进制数传递给函数

时间:2010-01-30 07:57:47

标签: c

gcc 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);
}

非常感谢任何建议,

6 个答案:

答案 0 :(得分:6)

0x066(和CHANNEL_UNACCEPTABLE)相同。 0x1117(以及USER_BUSY)也是如此。计算机没有十六进制或十进制的区别。

(为了清楚起见,你应该drop_and_release_call(23, CHANNEL_UNACCEPTABLE)。)

答案 1 :(得分:4)

是的,它只是一个整数。

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

答案 2 :(得分:3)

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

drop_and_release_call(23, CHANNEL_UNACCEPTABLE);

如果您真的想使用这些数字,是的,您可以直接传递它们:

drop_and_release_call(23, 0x06);

答案 3 :(得分:2)

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

习惯上使“枚举”类型(如端口号)无符号。旗帜也是。

答案 4 :(得分:2)

C并不关心它是在代码中作为基数16还是基数10 ......它将以任意方式将其表示为整数。

在输入或输出期间,您唯一真正需要担心的是基数。

答案 5 :(得分:1)

C编译器将值解析为int。您列出的值只需要5位,它可以很容易地放入char中。但是无论如何,char都被提升为函数调用中的int,你也可以使用int。