【问题标题】:Compare two byte arrays and find which one is bigger [closed]比较两个字节数组并找出哪个更大[关闭]
【发布时间】:2013-10-15 12:07:47
【问题描述】:

我有一个锯齿状字节数组byte[][],我正在尝试获取它的子数组项的最大值。

我已经创建了一个方法:

private byte[] Max(byte[][] arrBytes)
{
    var max = arrBytes[0];
    foreach (var arr in arrBytes)
    {
        if (max != null && arr != null)
            if () // => How to say max > arr
                max = arr;
    }
    return max;
}

如何从上述方法返回最大字节数组?

编辑 对于所有询问单词bigger 的度量或定义的人,我说锯齿状数组包含SQLServer(varbinary(8))的(时间戳)数据类型,数据看起来像这样

字节数组表示(例如:0x00000000013F3F3F)

【问题讨论】:

  • 如何定义一个数组大于另一个数组?
  • @SVI 你告诉我们你想找出哪个数组“更大”。您必须定义更大对您的应用程序意味着什么。长度(元素数量)更大?就所有元素的总和而言更大?你必须知道你想要什么。
  • 您想要最大长度、最大平均值、最大最大值/最小值的数组吗?还是你想要锯齿状数组中所有字节的最大值的数组?
  • 我认为问题在于标题具有误导性。问题是最大值,看起来只有一个锯齿状数组,而 OP 只想要数组中任意位置的最大值。也许???
  • 我认为您应该尝试将 byte[] 转换为时间戳值并比较它们以找到最大值。

标签: c# arrays jagged-arrays


【解决方案1】:

你在寻找这样的东西吗?

    private byte[] Max(byte[][] arrBytes)
    {
        byte[] max = new byte[arrBytes.GetLength(0)];
        int i = 0;
        foreach (byte[] arr in arrBytes)
        {
            byte m = 0;
            foreach (byte b in arr)
            {
                m = Math.Max(m, b);
            }
            max[i] = m; ++i;
        }
        return max;
    }

【讨论】:

    【解决方案2】:

    也许转换为long 并进行比较会对您有所帮助?

    // Note: you should ensure that the arrays have at least 8 bytes!
    // Although from your edits, it sounds like your "jagged" array isn't jagged at all
    if (BitConverter.ToUInt64(max,0) > BitConverter.ToUInt64(arr,0)) 
    {
        // do whatever.
    }
    

    但要注意字节顺序差异。如果您的时间戳只是多个刻度,这将起作用。如果它实际上是一个日期,则需要找出适当的转换。

    【讨论】:

      猜你喜欢
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 2011-07-23
      • 2010-09-07
      相关资源
      最近更新 更多