【问题标题】:Calculating the mode of an array containing hex values?计算包含十六进制值的数组的模式?
【发布时间】:2017-06-02 04:18:30
【问题描述】:

我正在用 C# 编程。

我一直在试验一些代码来计算包含整数的数组的模式。即给定{5,6,2,1,5},模式为5。

我的问题是,这可以用十六进制值来完成吗?

例如,假设我有以下数组:

unsigned char HEXVALUES[ ] = {0x66, 0x60, 0xe7, 0xf0, 0x66};

如何编写一个告诉我 0x66 是模式的程序?

我曾考虑将它们转换为十进制值并以这种方式找到模式,但似乎效率低下。

谢谢

【问题讨论】:

  • 像 0x66 这样的十六进制数是整数,将给出与十进制相同的结果。 Bot hex 和 decimal 以二进制形式存储在内存中,使用代码中的指定格式读取/写入字符串。

标签: c# hex decimal


【解决方案1】:

十六进制值只是数值的表示。例如。这些都是相同十进制值 102 的表示:

  • 66(十六进制)
  • 102(十二月)
  • 01100110(斌)

因此,只需创建以十六进制格式编写的整数值数组,然后像使用任何其他整数值一样进行计算:

var array = new[] { 0x66, 0x60, 0xe7, 0xf0, 0x66 };
var mode = array.GroupBy(x => x).OrderByDescending(g => g.Count()).First().Key;
Console.WriteLine($"{mode:X}"); // output int as hex

【讨论】:

    【解决方案2】:

    我想任何集合的模式都是

    theCollection
      .GroupBy(x => x)
      .OrderByDescending(x => x.Count())
      .Select(g => g.FirstOrDefault())
      .First()
    

    【讨论】:

      【解决方案3】:

      “十六进制数”与整数相同。不同之处在于它们在视觉上的表示方式(在代码中,以及在转换为字符串时)。在二进制中它们是完全相同的。

      所以你之前使用的任何代码

      unsigned char[] list = new char[]{5,6,2,1,5};
      FindMode(list);
      

      将与

      相同
      unsigned char[] list = new char[]{0x66, 0x60, 0xe7, 0xf0, 0x66};
      FindMode(list);
      

      【讨论】:

        猜你喜欢
        • 2011-12-31
        • 1970-01-01
        • 2019-03-01
        • 2012-06-28
        • 2019-04-29
        • 2014-10-10
        • 1970-01-01
        • 2019-04-16
        • 2014-03-26
        相关资源
        最近更新 更多