【问题标题】:Get appropriate values from hexadecimal从十六进制中获取适当的值
【发布时间】:2012-01-21 23:19:53
【问题描述】:

假设我必须在下表中列出值(第一行是描述)

描述 -> 十进制值 -> 位号

选项1 -> 1 -> 1

选项2 -> 2 -> 2

选项3 -> 4 -> 3

选项4 -> 8 -> 4

OptionX -> 137438953472 -> 38

现在我有以下值:0x7000000800000000。我如何识别根据该数字选择了哪些选项?

【问题讨论】:

    标签: c# algorithm


    【解决方案1】:
    ulong v = 0x7000000800000000;
    for( int i = 1; v != 0; ++i ) {
        if ((v & 1) != 0) Console.WriteLine(i);
        v >>= 1;
    }
    

    或使用BitVector 类。

    【讨论】:

    • @ChrisF:为什么 C# 不能只包含通常的隐式转换?
    • 也许允许这些代码产生了连锁反应? (纯属猜测)。
    • @ChrisF:我敢肯定这是为了阻止if (i = 5) 的错误尝试。 (误导,因为它没有捕捉到if (b = false)
    • 如果是字符串,如何解析0x7000000800000000?
    • @niao:例如,您可以使用ulong.TryParse。由于您的字符串是十六进制的,请使用 NumberStyles.AllowHexSpecifier 标志。
    【解决方案2】:

    使用按位与运算符&,也可能使用位移运算符<<(左移)和>>(右移)。

    例如,如果(options & (1 << (n - 1))) != 0 为真,则选择了选项n

    【讨论】:

    • 我应该使用某种循环吗?
    猜你喜欢
    • 2015-08-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 2020-02-12
    • 2021-01-03
    • 1970-01-01
    相关资源
    最近更新 更多