用于字节数组的StringBuilder的等效项

Mat*_*eld 32 c# stringbuilder bytearray

这是一个简单的,我认为可以回答的问题.我确实试图在这里找到答案,但没有提出任何答案 - 如果有我错过的东西,请道歉.

无论如何,是否有相当于StringBuilder的字节数组?

我并不担心所有不同的重载Append()- 但我想看到Append(byte)Append(byte[]).

周围有什么东西或者是你自己的时间吗?

Fre*_*örk 32

会对MemoryStream你有用吗?界面可能不太方便,但它提供了一种附加字节的简单方法,当你完成后,你可以byte[]通过调用获取内容ToArray().

StringBuilder通过制作扩展方法可能可以实现更像类似的接口.

更新
扩展方法可能如下所示:

public static class MemoryStreamExtensions
{
    public static void Append(this MemoryStream stream, byte value)
    {
        stream.Append(new[] { value });
    }

    public static void Append(this MemoryStream stream, byte[] values)
    {
        stream.Write(values, 0, values.Length);
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

MemoryStream stream = new MemoryStream();
stream.Append(67);
stream.Append(new byte[] { 68, 69 });
byte[] data = stream.ToArray();  // gets an array with bytes 67, 68 and 69
Run Code Online (Sandbox Code Playgroud)

  • @Matt:是的,这是正确的.在扩展方法中,`value`的类型为`byte`,因此推断出`byte []`.在最后一个示例中,我需要指定`new byte []`,因为编译器会推断出类型`int`. (2认同)

Ter*_*ver 17

MemoryStream方法是好的,但如果你想拥有的StringBuilder类行为增加BinaryWriter.BinaryWriter提供了您可能想要的所有写入覆盖.

MemoryStream stream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(stream);
writer.Write((byte)67);
writer.Write(new byte[] { 68, 69 });
Run Code Online (Sandbox Code Playgroud)

  • 请注意,“BinaryWriter”的“Write(String)”方法将长度前缀写入流! (2认同)

Luk*_*keH 11

可能List<byte>:

var byteList = new List<byte>();
byteList.Add(42);
byteList.AddRange(new byte[] { 1, 2, 3 });
Run Code Online (Sandbox Code Playgroud)