Copy/set 内存中的单个字节<byte>
Copy/set a single byte in a Memory<byte>
我开始使用 C# 中的 System.Buffers.MemoryPool<T>
和 System.Memory<T>
,希望减少字节数组的分配。
我有一堆字节和字节数组需要复制到单个字节数组(用于仅适用于 byte[]
的方法,不适用于 Span
/Memory
).我正在做这样的事情:
byte aByte = 0x01;
byte[] aByteArray = { 0x02, 0x03, 0x04 };
byte[] anotherByteArray = { 0x05, 0x06, 0x07 };
using (var buffer = MemoryPool<byte>.Shared.Rent(7))
{
Span<byte> target;
target = buffer.Memory.Slice(0, aByteArray.Length).Span;
aByteArray.CopyTo(target);
target = buffer.Memory.Slice(aByteArray.Length, anotherByteArray.Length).Span;
aByteArray.CopyTo(target);
// How to copy a single byte?
}
所以,我想出了如何将字节数组复制到缓冲区,但无法弄清楚如何设置单个字节。我试过 buffer.Memory.Span[0] = aByte
,但是 Span
没有 setter.
阅读@PetSerAl 的评论后我检查了一下,实际上没有编译时错误 - 只有 Visual Studio 中显示的警告。 ReSharper 让我了解了这里可能存在的错误。
我应该考虑检查一下,因为 ReSharper 之前让我失望了很多次,因为它有新的 C# 功能,例如 Span<T>
和 Memory<T>
:/
我开始使用 C# 中的 System.Buffers.MemoryPool<T>
和 System.Memory<T>
,希望减少字节数组的分配。
我有一堆字节和字节数组需要复制到单个字节数组(用于仅适用于 byte[]
的方法,不适用于 Span
/Memory
).我正在做这样的事情:
byte aByte = 0x01;
byte[] aByteArray = { 0x02, 0x03, 0x04 };
byte[] anotherByteArray = { 0x05, 0x06, 0x07 };
using (var buffer = MemoryPool<byte>.Shared.Rent(7))
{
Span<byte> target;
target = buffer.Memory.Slice(0, aByteArray.Length).Span;
aByteArray.CopyTo(target);
target = buffer.Memory.Slice(aByteArray.Length, anotherByteArray.Length).Span;
aByteArray.CopyTo(target);
// How to copy a single byte?
}
所以,我想出了如何将字节数组复制到缓冲区,但无法弄清楚如何设置单个字节。我试过 buffer.Memory.Span[0] = aByte
,但是 Span
没有 setter.
阅读@PetSerAl 的评论后我检查了一下,实际上没有编译时错误 - 只有 Visual Studio 中显示的警告。 ReSharper 让我了解了这里可能存在的错误。
我应该考虑检查一下,因为 ReSharper 之前让我失望了很多次,因为它有新的 C# 功能,例如 Span<T>
和 Memory<T>
:/