【问题标题】:Same integer lists, different byte arrays相同的整数列表,不同的字节数组
【发布时间】:2019-05-03 13:33:10
【问题描述】:

我有一个关于在 C# 中尝试将 List<short> 的元素转换为 byte[] 的元素时发生在我身上的有趣事情的问题。

首先,我必须读取包含 262144 short 类型 signed 数字的大型二进制文件。我已经阅读了文件并使用以下代码构建了数字列表:

byte[] content = null;
content = File.ReadAllBytes(scanName);
List<int> transformed = new List<int>();

for (int n = 0; n < content.Length; n += 2) // 2 bytes 
{
  short sample = BitConverter.ToInt16(content, n);
  transformed.Add(sample);
}

然后我用算法压缩和解压缩数字并返回相同的值,这似乎是正确的。尝试将两个列表都转换为字节数组时会出现问题。这是通过以下方法完成的:

private byte[] ToByte(List<short> list){
    List<byte> toRet = new List<byte>();

    foreach(short s in list)
    {
       byte[] converted = BitConverter.GetBytes(s);
        foreach(byte b in converted)
        {
           toRet.Add(b);
        }
     }
    return toRet.ToArray();
}

但是当我将两个字节数组与first.SequenceEqual(second) 进行比较时,该方法返回了false。是不是很奇怪,因为两个列表中的值是一样的?

【问题讨论】:

  • 您确定列表相等吗?你是怎么检查的?
  • 我已经将它们的值与 for 循环进行了比较。 @hessamhedieh
  • 您不是从列表中读取,而是从 seconde 方法的 shortArray 中读取。错误不使用列表?
  • 无法重现问题,也许完整的编译代码可能会有所帮助。
  • @Aldert 谢谢,在写 StackOverflow 时出错。谢谢,问题已更新。

标签: c# arrays type-conversion


【解决方案1】:

最后,我已经解决了这个问题。问题不在于将短转换为字节,而在于尚未在此处发布的代码部分。具体来说,我犯了一个非常初学者的错误,我以错误的方式将二维数组转换为一维数组。现在一切正常。感谢您的所有回复,不便之处敬请见谅!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 2020-07-24
    相关资源
    最近更新 更多