我试图弄清楚如何使该方法从ptr索引开始,而不是从0-8个字节覆盖。另外,如果有人通过网络知道如何使用Big / Little Edian机器进行此项工作,那将是很棒的。
private byte[] buffer = new byte[30];
private int ptr = 0;
unsafe void GetBytes(ulong value)
{
fixed (byte* b = buffer) //start at buffer[ptr]
*((int*)b) = *(int*)&value;
ptr += 8;
}
我想出了如何通过以下方法指向ptr的指针
private byte[] buffer = new byte[30];
private int ptr = 0;
unsafe void GetBytes(ulong value)
{
fixed (byte* b = &buffer[ptr]) //start at buffer[ptr]
*((int*)b) = *(int*)&value;
ptr += 8;
}
答案 0 :(得分:2)
您可以轻松转换字节顺序:
using System.Buffers.Binary;
if (!BitConverter.IsLittleEndian)
{
value = BinaryPrimitives.ReverseEndianness(value);
}
我更喜欢使用Span
,它将更安全,更容易阅读:
using System.Buffers.Binary;
Span<byte> span = buffer;
BinaryPrimitives.WriteUInt64LittleEndian(span.Slice(ptr), value);
如果要使用系统的字节序而不是显式的内容,也可以这样做:
using System.Runtime.InteropServices;
Span<byte> span = buffer;
MemoryMarshal.Write(span.Slice(ptr), value);
针对非核心内容进行编辑:
在写入指针之前,可以使用HostToNetworkOrder
将整数转换为big endian。