C# 数字格式

C# 数字格式,c#,.net-4.0,c#-4.0,formatting,C#,.net 4.0,C# 4.0,Formatting,我试图为控制USB数据总线通信设备的C类库创建一个C#包装器。此设备支持连接到外部时钟或使用自己的内部时钟,具体取决于设备初始化时设置的值 制造商为其C库提供了头文件,其中包含以下#定义变量 #define DATA_SRC_INT = 0x000000000L #define DATA_SRC_EXT = 0x000000001L #define DATA_SRC_NONE = 0x00000000FL 这就给我留下了一个问题。0x000000000L准确代表什么数字 我意识到这个问题可能过

我试图为控制USB数据总线通信设备的C类库创建一个C#包装器。此设备支持连接到外部时钟或使用自己的内部时钟,具体取决于设备初始化时设置的值

制造商为其C库提供了头文件,其中包含以下#定义变量

#define DATA_SRC_INT = 0x000000000L
#define DATA_SRC_EXT = 0x000000001L
#define DATA_SRC_NONE = 0x00000000FL
这就给我留下了一个问题。
0x000000000L
准确代表什么数字


我意识到这个问题可能过于简单化了。在我最初写这个问题的时候,我还没有看到很多可移植的C代码。我试图根据收到的一些反馈来澄清我的原始问题。

这些值分别是
长的
值0、1和15。后缀
L
表示它是
long
文本,而前缀
0x
表示十六进制数字文本

在C#中,您也可以做几乎相同的事情(这里不需要
L
后缀,因为编译器已经知道类型并进行相应的转换–在您的C代码中,定义只是字符串替换,因此类型必须与它们一起携带):

但除非十六进制表示法产生实际的细节(如位字段的组成),否则我通常坚持使用小数:

public const long DATA_SRC_INT = 0;
public const long DATA_SRC_EXT = 1;
public const long DATA_SRC_NONE = 15;

0x表示数字是十六进制的。结尾的L表示这是一个长的


所以。。。列出的数字分别是0、1和15。

Ramhound:该格式仅适用于编译器。如果您在C#中也将其声明为
long
,您不应该感到意外–毕竟它的类型和值是相同的。
L
和十六进制表示法在编译器蚕食源代码后就消失了。再说一次,端口与原始代码的一致性可能也不是一个坏主意,但硬件真的不在乎:-)
public const long DATA_SRC_INT = 0;
public const long DATA_SRC_EXT = 1;
public const long DATA_SRC_NONE = 15;