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];
?