将整字节[]转换为uint
本文关键字:转换 uint 字节 | 更新日期: 2023-09-27 18:00:20
我的代码中有byte[]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;
如何转换?
正如@animalonline所建议的,您应该使用BitConverter
将字节数组转换为uint或*ulong。因此,您有6个字节,uint对您来说太小了。您应该转换为ulong*。但转换器需要八个字节,所以创建具有所需字节数的新数组:
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
在System命名空间中,您将找到BitConverter
库类。您希望静态ToUInt64()
函数如下:
var a = BitConverter.ToUInt64(srno, 0);
您需要将阵列的大小调整为[8]
MSDN
每个人似乎都忽略了预期输出的字节顺序编码。BitConverter
类使用固定编码(通常为Little Endian、IIRC)。示例中的输出被假定为Big Endian。在一个完美的世界里,你只需要自己计算,但使用Array.Reverse
比使用内置的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;
}