gpt4 book ai didi

c# - BitConverter.GetBytes 到位

转载 作者:行者123 更新时间:2023-11-30 13:46:09 34 4
gpt4 key购买 nike

我需要获取 UInt16UInt64 中的值作为 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;
}

用法:

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;
}
}

关于c# - BitConverter.GetBytes 到位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23057284/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com