我想将有符号字节数组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+"%");
});
?
答案 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之间的值
如果你通过线路(网络)发送这样一个字节,接收器就可以正确解释。