是否有一种方法可以在c#中编写二进制文字,比如在十六进制前加上0x?0b不行。

如果不是,有什么简单的方法可以做到呢?某种字符串转换?


当前回答

c# 7.0支持二进制文字(以及可选的下划线分隔符)。

一个例子:

int myValue = 0b0010_0110_0000_0011;

您也可以在Roslyn GitHub页面上找到更多信息。

其他回答

恐怕只有整数和十六进制直接(ECMA 334v4):

9.4.4.2整型字面值整型字面值用于写入值 类型为int、uint、long和ulong。 整数字面值有两种可能 形式:十进制和十六进制。

要解析,你可以使用:

int i = Convert.ToInt32("01101101", 2);

虽然不可能使用文字,也许BitConverter也可以是一个解决方案?

c# 6.0和Visual Studio 2015中没有实现二进制文字特性。但在2016年3月30日,微软宣布了Visual Studio '15'预览的新版本,我们可以使用二进制文字。

我们可以使用一个或多个下划线(_)字符作为数字分隔符。所以代码片段看起来像这样:

int x           = 0b10___10_0__________________00; //binary value of 80
int SeventyFive = 0B100_________1011; //binary value of 75

WriteLine($" {x} \n {SeventyFive}");

我们可以使用0b和0b中的任何一个,如上面的代码片段所示。

如果你不想使用数字分隔符,你可以像下面的代码片段一样使用它而不使用数字分隔符

int x           = 0b1010000; //binary value of 80
int SeventyFive = 0B1001011; //binary value of 75

WriteLine($" {x} \n {SeventyFive}");

c# 7.0支持二进制文字(以及可选的下划线分隔符)。

一个例子:

int myValue = 0b0010_0110_0000_0011;

您也可以在Roslyn GitHub页面上找到更多信息。

虽然字符串解析解决方案是最流行的,但我不喜欢它,因为在某些情况下,解析字符串会极大地影响性能。

当需要一种位域或二进制掩码时,我宁愿这样写

long bitMask = 1011001;

后来

int bit5 = BitField。GetBit(位掩码,5);

Or

bool flag5 = BitField。GetFlag(位掩码,5);”

BitField类在哪里

public static class BitField
{
    public static int GetBit(int bitField, int index)
    {
        return (bitField / (int)Math.Pow(10, index)) % 10;
    }

    public static bool GetFlag(int bitField, int index)
    {
        return GetBit(bitField, index) == 1;
    }
}