C# 将整个字节[]转换为uint

C# 将整个字节[]转换为uint,c#,.net,C#,.net,我的代码中有字节[]srno byte[] srno = new byte[6]; srno[0] = 0xff; srno[1] = 0x0f; srno[2] = 0x24; srno[3] = 0x12; srno[4] = 0x16; srno[5] = 0x0a; 现在我想要这个值在uint中 uint a = 0xff0f2412160a; 如何转换?正如@animaonline所建议的,您应该使用位转换器将字节数组转换为uint或*ulong。因此您有6个字节,uint对您来

我的代码中有字节[]srno

byte[] srno = new byte[6];

srno[0] = 0xff;
srno[1] = 0x0f;
srno[2] = 0x24;
srno[3] = 0x12;
srno[4] = 0x16;
srno[5] = 0x0a;
现在我想要这个值在uint中

uint a = 0xff0f2412160a;

如何转换?

正如@animaonline所建议的,您应该使用
位转换器
将字节数组转换为uint或*ulong。因此您有6个字节,uint对您来说太小了。您应该转换为ulong*。但转换器需要8个字节,因此请使用所需的字节数创建新数组:

byte[] value = new byte[8];
Array.Reverse(srno); // otherwise you will have a1612240fff result
Array.Copy(srno, value, 6);
ulong result = BitConverter.ToUInt64(value, 0);
Console.WriteLine("{0:x}", result); // ff0f2412160a

在系统名称空间中,您将找到
位转换器
库类。您希望静态
ToUInt64()
函数如下所示:

var a = BitConvert.ToUInt64(srno, 0);
您需要将阵列的大小调整为
[8]


每个人似乎都忽略了预期输出的字节顺序编码。
位转换器
类使用固定编码(通常是小端,IIRC)。示例中的输出假定为Big-Endian。在一个完美的世界里,你只需要自己计算,但是使用
Array更简单。反转
然后使用内置的
BitConverter

在我发布这篇文章之前,可能会有一堆答案,所以这里有一段非常快速的不安全代码:

public static unsafe ulong ToULong(byte[] values)
{
    byte* buffer = stackalloc byte[8];
    if (BitConverter.IsLittleEndian)
        Array.Reverse(values);
    System.Runtime.InteropServices.Marshal.Copy(values, 0, (IntPtr)buffer, values.Length);
    return *(ulong*)buffer;
}

一个
uint
是4个字节,但这里有6个字节。在任何情况下,您知道
位转换器
类吗?只需计算一下:
srno[0]*0x1000000000+srn0[1]*0x100000000…
。或者随便什么。@Ani:好的,没问题,告诉我关于ulong的事?BitConverter类需要索引我不想要特定索引我想要转换整个array@Kevan:如果您阅读文档,您会注意到索引告诉位转换器应该在哪里开始转换。您需要先反转数组!