【问题标题】:Get a integer value from HEX data从 HEX 数据中获取整数值
【发布时间】:2012-09-04 07:30:14
【问题描述】:

我有十六进制数据

Byte[] data = new Byte[2];
data[0]=FF;
data[1]=FF;

这里数据的二进制表示为

1111 1111 1111 1111

这里我只想找到位 0 到 11 的整数值。 (从左到右)但我没有得到如何以最小的复杂性找到价值?请帮助我。提前致谢。

【问题讨论】:

    标签: c# binary hex data-conversion


    【解决方案1】:
    short value = 0xFFFF;
    value = value & 0x0FFF; 
    

    此操作会将高四位变为 0。您可以将您的字符设为 val[1] = val[1] & 0x0F

    【讨论】:

      【解决方案2】:

      这是基本的东西......

      您没有“十六进制”数据,而是 2 字节大小的整数。

      在伪代码中(我不会说流利的 C#):

      int value=data[1]<<8 | data[0];
      int maskedvalue=value & 4095; // bits 0..11 inclusive set
      

      现在 maskedvalue 保存仅设置了低 11 位的值。

      【讨论】:

        【解决方案3】:

        将字节数组转换为字符串:

        StringBuilder sb = new StringBuilder(ba.Length * 2);
        foreach (byte b in ba)
        {
               sb.AppendFormat("{0:x2}", b)
        }
        return sb.ToString();
        

        然后,将字符串解析为 int

         int a = int.Parse("10026AB0", NumberStyles.AllowHexSpecifier);
        

        【讨论】:

        • 除此之外,我无法理解它应该如何工作
        【解决方案4】:

        如果您只需要特定位,则可以应用带有位掩码的逻辑 AND。
        在您的情况下,位掩码是 0000 1111 1111 1111(位 0 到并包括 11 位)或 0FFF。

        您提到“从左到右”,因此您可能想要 1111 1111 1111 0000 (FFF0) - 位 4 到 15,包括 15。

        【讨论】:

        • 您好,感谢您的回复。但在这里我想从左到右位 0 到 11。在这里,我想要只有 12 位的整数值(表示 1111 1111 1111 )而不是所有位(表示 1111 1111 1111 0000)。根据您的解决方案,它给出 16 位的值,但我只想要 12 位。
        • 您必须屏蔽一个由 16 位组成的值。掩码选择其中的 12 个。在逻辑与之后,16 位中的 12 位已被选中,这就是您获取值的方式。
        • 嗨,我试过了,但是 1111 1111 1111 0000 的值是 65520,而我想要的只有 12 位的值意味着 1111 1111 1111 并且它的值是 4095。那么我将如何计算呢?我想要从左到右的 12 位值。
        • 好的,“从左到右”是什么意思?每个单独位的值?
        • 假设我有 16 位值作为 1111 1111 1111 1111。这里我想要从左到右的前 12 位的值(意味着我只想要 1111 1111 1111 的值)。我怎么能找到那个?根据您的屏蔽逻辑,我得到 16 位的值(1111 1111 1111 0000)。
        猜你喜欢
        • 2012-02-17
        • 1970-01-01
        • 2012-04-27
        • 1970-01-01
        • 2012-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多