代码之家  ›  专栏  ›  技术社区  ›  Matt Whitfield

字节数组的StringBuilder等价物

  •  31
  • Matt Whitfield  · 技术社区  · 15 年前

    这是一个简单的问题,我想这个问题会得到回答的。我确实想在这里找到答案,但什么都没想出来-所以如果我错过了什么,请道歉。

    我不担心 Append() -但我想看看 Append(byte) Append(byte[]) .

    有什么事吗?还是你自己的时间?

    5 回复  |  直到 15 年前
        1
  •  34
  •   Fredrik Mörk    15 年前

    会的 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);
        }
    }
    

    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
    
        2
  •  17
  •   Jon Breytman    10 年前

    这个 MemoryStream 方法是好的,但是如果您想让类似StringBuilder的行为 BinaryWriter . BinaryWriter提供了您可能需要的所有写重写。

    MemoryStream stream = new MemoryStream();
    BinaryWriter writer = new BinaryWriter(stream);
    writer.Write((byte)67);
    writer.Write(new byte[] { 68, 69 });
    
        3
  •  11
  •   Greg    15 年前

    可能 List<byte>

    var byteList = new List<byte>();
    byteList.Add(42);
    byteList.AddRange(new byte[] { 1, 2, 3 });
    
        4
  •  2
  •   Aaron McIver    15 年前

    List<byte> 然后当你想要它作为一个数组时,你可以调用 ToArray()

        5
  •  0
  •   MStack    11 年前
    using System;
    using System.IO;
    
    public static class MemoryStreams
    {
        public static MemoryStream Append(
            this MemoryStream stream
            , byte value
            , out bool done)
        {
            try
            {
                stream.WriteByte(value);
                done = true;
            }
            catch { done = false; }
            return stream;
        }
    
        public static MemoryStream Append(
            this MemoryStream stream
            , byte[] value
            , out bool done
            , uint offset = 0
            , Nullable<uint> count = null)
        {
            try
            {
                var rLenth = (uint)((value == null) ? 0 : value.Length);
    
                var rOffset = unchecked((int)(offset & 0x7FFFFFFF));
    
                var rCount = unchecked((int)((count ?? rLenth) & 0x7FFFFFFF));
    
                stream.Write(value, rOffset, rCount);
                done = true;
            }
            catch { done = false; }
            return stream;
        }
    }