Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#位转换器_C#_.net_Casting - Fatal编程技术网

C#位转换器

C#位转换器,c#,.net,casting,C#,.net,Casting,这是我的密码。它给出了一个错误。为什么? 我想将byte[]转换为sbyte[]。有没有一个简单的选择 byte[] final = hmacsha1.ComputeHash(contentBArr); sbyte[] vOut = new sbyte[final.Length]; for (var i = 0; i < final.Length; i++) { var tmp = BitConverter.ToChar(final, i); vOut[i] = (sby

这是我的密码。它给出了一个错误。为什么?

我想将
byte[]
转换为
sbyte[]
。有没有一个简单的选择

byte[] final = hmacsha1.ComputeHash(contentBArr);

sbyte[] vOut = new sbyte[final.Length];
for (var i = 0; i < final.Length; i++)
{
    var tmp = BitConverter.ToChar(final, i);
    vOut[i] = (sbyte)tmp;
}
byte[]final=hmacsha1.ComputeHash(contentBArr);
sbyte[]vOut=新sbyte[最终长度];
对于(变量i=0;i

我想将字节[]转换为sbyte[]。有没有一个简单的选择

byte[] final = hmacsha1.ComputeHash(contentBArr);

sbyte[] vOut = new sbyte[final.Length];
for (var i = 0; i < final.Length; i++)
{
    var tmp = BitConverter.ToChar(final, i);
    vOut[i] = (sbyte)tmp;
}
LINQ方法:

var input = new byte[] { 10, 20, 30, 40, 50 };
var output = input.Select(x => (sbyte)x).ToArray();
您可以使用简单的
for
循环执行相同的操作:

var input = new byte[] { 10, 20, 30, 40, 50 };
var output = new sbyte[input.Length];

for(int i = 0; i < input.Length; i++)
{
    output[i] = (sbyte)input[i];
}
var input=新字节[]{10,20,30,40,50};
var输出=新的sbyte[input.Length];
for(int i=0;i
使用与此相同的Convert.ToSByte()方法

byte[] final = hmacsha1.ComputeHash(contentBArr);

sbyte[] vOut = new sbyte[final.Length];
for (var i = 0; i < final.Length - 1; i++)
{
    var tmp = Convert.ToSByte(final[i]);
    vOut[i] = (sbyte)tmp;
}
参考资料:(MSDN)。

您可以通过以下方式强制转换:

byte[] final = new byte[] { 0, 5, 130, 255 };
sbyte[] vOut = final.Select(b => (sbyte)b).ToArray();
Console.WriteLine(string.Join(", ", vOut)); // 0, 5, -126, -1

为什么使用BitConverter.ToChar方法?我已经编辑了我的问题。要将无符号字节数组转换为有符号字节数组,请注意:
i
应为:
i
。(
您已经像我一样使用了变量名。非常感谢您的帮助,我将使用
Array.ConvertAll(final,b=>(sbyte)b)
而不是这里的LINQ方法。Array.ConvertAll将能够提前分配整个数组,从而避免在转换过程中进行任何重新分配。嗯,好主意@Michael。但是,我将使用LINQ留下我的答案,原因有两个:1.这是一个散列,因此只有几个字节,因此性能不太可能是一个问题cern,2.我通常喜欢对所有可枚举项使用标准化语言(LINQ),而不需要为数组、
List
s和其他集合读写不同的语法。我看不到
Convert.ToSByte
重载
byte[]
int
parameters.LINQ对我很好。非常感谢你纠正我的问题。回答
输出[i]=(sbyte)输入[i];