C# 数字格式
我试图为控制USB数据总线通信设备的C类库创建一个C#包装器。此设备支持连接到外部时钟或使用自己的内部时钟,具体取决于设备初始化时设置的值 制造商为其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准确代表什么数字 我意识到这个问题可能过
#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;