使用File.WriteAllBytes
,我们可以将字节数组写入如下文件:
byte[] myByteArray;
File.WriteAllBytes(@"C:\myFile.format", myByteArray);
但有没有办法将有符号字节数组( sbyte [] )写入文件?
这样的事情:
sbyte[] my_sByteArray;
File.WriteAllsBytes(@"C:\myFile.format", my_sByteArray);
对于那些想知道我为什么要这样做的原因的人,请点击 my question here 。
答案 0 :(得分:1)
你实际上可以这样做:
sbyte[] my_sByteArray = { -2, -1, 0, 1, 2 };
byte[] my_byteArray = (byte[])my_sByteArray.Cast<byte>();
File.WriteAllBytes(@"C:\myFile.format", my_byteArray); // FE FF 00 01 02
甚至这个:
sbyte[] my_sByteArray = { -2, -1, 0, 1, 2 };
byte[] my_byteArray = (byte[])(Array)my_sByteArray;
File.WriteAllBytes(@"C:\myFile.format", my_byteArray); // FE FF 00 01 02
一种可能的替代解决方案是将sbytes
转换为short
或int
,然后再将其写入文件。像这样:
sbyte[] my_sByteArray = { -2, -1, 0, 1, 2 };
byte[] my_byteArray =
my_sByteArray.SelectMany(s => BitConverter.GetBytes((short)s)).ToArray();
File.WriteAllBytes(@"C:\myFile.format", my_byteArray);
// FE FF FF FF 00 00 01 00 02 00
当然,这会使你需要编写的字节数增加一倍(或者如果使用int
则增加四倍),但收效甚微。