1

我们可以将File.WriteAllBytes字节数组写入这样的文件:

byte[] myByteArray;
File.WriteAllBytes(@"C:\myFile.format", myByteArray);

但是有没有办法将有符号字节数组(sbyte[])写入文件?
像这样的东西:

sbyte[] my_sByteArray;
File.WriteAllsBytes(@"C:\myFile.format", my_sByteArray);

对于那些想知道我为什么要这样做的原因的人,请在此处关注我的问题

4

1 回答 1

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

一种可能的替代解决方案是在将它们写入文件之前将它们转换sbytesshort's 或's。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会使您必须写入的字节数增加一倍(如果使用 则增加四倍),但收益甚微。

于 2013-07-19T21:48:18.067 回答