gpt4 book ai didi

c# - 对缓冲区中给定指针的不安全转换

转载 作者:行者123 更新时间:2023-11-30 22:53:52 26 4
gpt4 key购买 nike

我想弄清楚如何让这个方法从索引 ptr 开始,而不是从 0 - 8 字节覆盖。此外,如果有人知道如何通过联网使它与大/小 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;
}

最佳答案

您可以轻松转换字节顺序:

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在写入指针之前将整数转换为大端。

关于c# - 对缓冲区中给定指针的不安全转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56814360/

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