我正在读入一个原始音频文件(CD 音轨翻录),进行字节交换,然后写回一个 wav 文件。
我的例程正确处理了字节,但只处理了大约一半的文件。我是一名 VB.NET 开发人员,并不是真正的 C# 开发人员,并且此代码无法正确转换为 VB.NET(出现溢出错误)。
与其说是计算/修剪,不如说是真正的“交换”。 (短)((缓冲区[i + 1] * 256)+缓冲区[i])
我相信它只写了一半的示例,但我不知道如何修复!
public static short[] SwapBytesArray(string fileName)
{
byte[] buffer = System.IO.File.ReadAllBytes(fileName);
long fileLength = buffer.LongLength;
if ((fileLength & 1) == 1)
{
throw new ArgumentException("File length must be an even number of bytes");
}
System.Collections.Generic.List<short> sList = new System.Collections.Generic.List<short>();
for (long i = 0; i < fileLength - 1; i += 2)
{
byte tmp = buffer[i];
sList.Add((short)((buffer[i + 1] * 256) + buffer[i]));
//buffer[i + 1] = tmp;
}
return sList.ToArray();
}
最佳答案
为什么要返回一个short
的数组?
如果要写回文件,byte[]
数组不是更好的选择吗?
即
public static byte[] SwapBytes(string fileName)
{
byte[] buffer = System.IO.File.ReadAllBytes(fileName);
long fileLength = buffer.LongLength;
if ((fileLength & 1) == 1)
{
throw new ArgumentException("File length must be an even number of bytes");
}
for (long i = 0; i < fileLength - 1 ; i +=2 )
{
byte tmp = buffer[i];
buffer[i] = buffer[i + 1];
buffer[i + 1] = tmp;
}
return buffer;
}
关于c# - 交换文件中的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/931262/