我正在尝试为C类库创建一个C#包装器来控制USB数据总线通信设备。该器件支持连接外部时钟或使用自己的内部时钟,具体取决于器件初始化时设置的值。
制造商为其C库提供了带有以下#define变量
的头文件#define DATA_SRC_INT = 0x000000000L
#define DATA_SRC_EXT = 0x000000001L
#define DATA_SRC_NONE = 0x00000000FL
所以这让我有了问题。 0x000000000L
到底代表什么数字?
我意识到这个问题可能过于简单化了。当我最初写这个问题时,我没有看到大量的可移植C代码。我试图根据收到的一些反馈来澄清我原来的问题。
答案 0 :(得分:8)
这些值分别为long
0,1和15。后缀L
表示它是long
字面值,而前缀0x
表示十六进制数字文字。
在C#中你也可以做同样的事情(这里不需要L
后缀,因为编译器已经知道类型并相应地转换 - 在你的C代码中,定义只是字符串替换,因此这种类型必须随身携带):
public const long DATA_SRC_INT = 0x0;
public const long DATA_SRC_EXT = 0x1;
public const long DATA_SRC_NONE = 0xF;
但除非十六进制表示法产生实际见解(例如位域的组成),否则我通常会坚持使用小数:
public const long DATA_SRC_INT = 0;
public const long DATA_SRC_EXT = 1;
public const long DATA_SRC_NONE = 15;
答案 1 :(得分:3)
0x表示该数字为十六进制。最后的L意味着它很长。
所以...列出的数字分别为0,1和15。