如何在 .NET 2003 中编写十六进制和二进制常量

本文关键字:十六进制 二进制 常量 NET 2003 | 更新日期: 2023-09-27 18:31:03

所以,我熟悉GCC 0b00010010例如编写二进制常量。如何在 .NET 中执行此操作?我主要关注 VB C# 和C++,因为我正在调试/修改这些语言的代码。

如果没有直接的方法可以做到这一点,是否有一条短途路线在以后不会无法阅读和修改?


为说明问题原因而添加的代码:

<FlagsAttribute( )> _
Enum ControlTypeEnum as Short
                    ‘   5 4 S 3 2 1 M L
    None = 0        ‘0x 0 0 0 0 0 0 0 0
    Lathe = 1       
    Mill = 2        
    P100 = 4        '*
    P200 = 8        '*
    P300 = 16       
    P300L = 17      '*
    P300SLP = 49    '*
    P300M = 18      '*
    P300SMP = 50    '*
    P400L = 65      '*
    P400SLP = 97    '*
    P400M = 66      '*
    P400SMP = 98    '*
End Enum
'Values with asterisk are valid return values from function

如何在 .NET 2003 中编写十六进制和二进制常量

在 C# 中,您可以做的最接近的事情是将其定义为字符串并使用 Convert.ToInt(或等)。

 var flags = Convert.ToInt32( "00010010", 2 );

这是功能性的,但冗长和漂亮的嘶吼。你可能会(如果你疯了)考虑一个扩展方法

public static class Extensions
{
    public static Int32 toInt(this string me)
    {
        return Convert.ToInt32(me, 2);
    }
}
(...)
var myflags = "00010010".toInt();
(...)

我更喜欢以下内容:

None = 0                       = 0
Lathe = 1                      = 1
Mill = 2                       = 1<<1
P100 = 4                       = 1<<2
P200 = 8                       = 1<<3
P300 = 16                      = 1<<4
S    = 32                      = 1<<5
P400 = 64                      = 1<<6

。然后,稍后在您的代码中,使用 P400 & Lathe & Mill 而不是额外的常量 P400LM 。(根据您更喜欢什么,使用二的幂的十进制或位移表示形式。


如果你已经有一大堆代码依赖于这些enum并且不想重构,你可以使用

P400LM = 1<<6 | 1<<1 | 1<<0

这清楚地表明了这个标志的组合(在我看来,比67更清楚。