我需要得到的值UInt16和UInt64作为Byte[].目前我正在使用BitConverter.GetBytes,但这种方法每次都给我一个新的数组实例.
我想使用一种方法,允许我将这些值"复制"到现有的数组,如:
.ToBytes(UInt64 value, Byte[] array, Int32 offset);
.ToBytes(UInt16 value, Byte[] array, Int32 offset);
Run Code Online (Sandbox Code Playgroud)
我一直在看看使用ILSpy的.NET源代码,但我不太确定这段代码是如何工作的,如何安全地修改它以符合我的要求:
public unsafe static byte[] GetBytes(long value)
{
byte[] array = new byte[8];
fixed (byte* ptr = array)
{
*(long*)ptr = value;
}
return array;
}
Run Code Online (Sandbox Code Playgroud)
这将是实现这一目标的正确方法吗?
更新:我不能使用不安全的代码.它不应该创建新的数组实例.
你可以这样做:
static unsafe void ToBytes(ulong value, byte[] array, int offset)
{
fixed (byte* ptr = &array[offset])
*(ulong*)ptr = value;
}
Run Code Online (Sandbox Code Playgroud)
用法:
byte[] array = new byte[9];
ToBytes(0x1122334455667788, array, 1);
Run Code Online (Sandbox Code Playgroud)
您只能以字节为单位设置偏移量.
如果您想要托管方式:
static void ToBytes(ulong value, byte[] array, int offset)
{
byte[] valueBytes = BitConverter.GetBytes(value);
Array.Copy(valueBytes, 0, array, offset, valueBytes.Length);
}
Run Code Online (Sandbox Code Playgroud)
或者您可以自己填写值:
static void ToBytes(ulong value, byte[] array, int offset)
{
for (int i = 0; i < 8; i++)
{
array[offset + i] = (byte)value;
value >>= 8;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1576 次 |
| 最近记录: |