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

时间:2015-08-06 10:48:06

标签: c#

我想将有符号字节数组sbyte[]写入流。我知道Stream.Write只接受无符号字节[],因此我可以在将sbyte[]传递给流之前将byte[]转换为sbyte[]。但我真的需要将数据发送为BinaryWriter.Write。有办法吗?我找到Stream.Write,但这相当于$("input[type=checkbox]").click(function(){ var arrayId=$(this).attr("name").split("_"); var numberId=arrayId[0]; var percentage=Math.floor(100/$("input[name*='"+numberId+"_']:checked").length); console.log(percentage); $("input[name*='"+numberId+"_']").parent().children("span").html("0%"); $("input[name*='"+numberId+"_']:checked").parent().children("span").html(percentage+"%"); });

2 个答案:

答案 0 :(得分:8)

您可以使用CLR允许您免费在byte[]sbyte[]之间进行转换的事实,“即使C#没有:

sbyte[] data = ...;
byte[] equivalentData = (byte[]) (object) data;
// Then write equivalentData to the stream

请注意,首先需要强制转换为object以“说服”C#编译器,以便转换为byte[] 可能工作。 (C#语言认为这两种数组类型完全不兼容。)

这样您就不需要创建所有数据的副本 - 您仍然将相同的引用传递给Stream.Write,这只是更改“引用类型”的问题。

答案 1 :(得分:1)

一些背景知识:

无符号字节有8位,可以表示0到255之间的值。

签名字节是相同的8位,但解释不同:最左边的位(MSB)被视为“符号”位,0表示正数,1表示负数。其余7个Bites可以表示0到127之间的值。

组合无符号字节可以表示介于-128和+127之间的值

如果你通过线路(网络)发送这样一个字节,接收器就可以正确解释