将带符号的字节数组写入流

Iva*_*an 2 c#

我想将有符号的字节数组写入sbyte[]流.我知道,Stream.Write只接受无符号字节[],这样我就可以转换sbyte[]byte[]之前将它传递给流.但我真的需要将数据发送为sbyte[].有办法吗?我发现BinaryWriter.Write但这相当于Stream.Write

Jon*_*eet 8

您可以使用的事实,CLR允许你之间进行转换byte[],并sbyte[]"免费",即使C#不:

sbyte[] data = ...;
byte[] equivalentData = (byte[]) (object) data;
// Then write equivalentData to the stream
Run Code Online (Sandbox Code Playgroud)

请注意,object首先需要使用强制转换来"说服" byte[] 可能有效的强制转换的C#编译器.(C#语言认为这两种数组类型完全不兼容.)

这样您就不需要创建所有数据的副本 - 您仍然传递相同的引用Stream.Write,只需更改"引用类型"即可.

  • @DrKoch:因为它不会编译.我添加了一个额外的段落来解释这一点. (2认同)
  • @Ivan:如果你认为有符号字节只是对底层(无符号)字节的解释,那么它就有意义了.同样,4个字节可以解释为整数,或浮点数,或其他编码为4个字节的东西; 您可以通过以不同方式解释字节中的位来将单个字节解释为有符号字节.你不能发送"有符号字节",你总是发送(无符号)字节. (2认同)