【发布时间】: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