我需要获取值UInt16
and UInt64
as Byte[]
。目前我正在使用BitConverter.GetBytes
,但是这个方法每次都会给我一个新的数组实例。
我想使用一种方法,允许我将这些值“复制”到已经存在的数组中,例如:
.ToBytes(UInt64 value, Byte[] array, Int32 offset);
.ToBytes(UInt16 value, Byte[] array, Int32 offset);
我一直在使用 ILSpy 查看 .NET 源代码,但我不太确定该代码是如何工作的以及如何安全地修改它以满足我的要求:
public unsafe static byte[] GetBytes(long value)
{
byte[] array = new byte[8];
fixed (byte* ptr = array)
{
*(long*)ptr = value;
}
return array;
}
哪种方法是实现这一目标的正确方法?
更新:我不能使用不安全的代码。它不应该创建新的数组实例。
你可以这样做:
static unsafe void ToBytes(ulong value, byte[] array, int offset)
{
fixed (byte* ptr = &array[offset])
*(ulong*)ptr = value;
}
Usage:
byte[] array = new byte[9];
ToBytes(0x1122334455667788, array, 1);
您只能以字节为单位设置偏移量。
如果您想要托管方式来做到这一点:
static void ToBytes(ulong value, byte[] array, int offset)
{
byte[] valueBytes = BitConverter.GetBytes(value);
Array.Copy(valueBytes, 0, array, offset, valueBytes.Length);
}
或者你可以自己填写值:
static void ToBytes(ulong value, byte[] array, int offset)
{
for (int i = 0; i < 8; i++)
{
array[offset + i] = (byte)value;
value >>= 8;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)