c#如何将字节数组添加到字节数组中

时间:2011-04-08 06:33:50

标签: c# bytearray

如何在现有字节数组的开头添加一个字节? 我的目标是使数组长3个字节到4个字节。所以这就是为什么我需要在它的开头添加00填充。

7 个答案:

答案 0 :(得分:43)

你做不到。无法调整阵列大小。您必须创建一个新数组并将数据复制到它:

bArray = addByteToArray(bArray,  newByte);

代码:

public byte[] addByteToArray(byte[] bArray, byte newByte)
{
    byte[] newArray = new byte[bArray.Length + 1];
    bArray.CopyTo(newArray, 1);
    newArray[0] = newByte;
    return newArray;
}

答案 1 :(得分:15)

正如这里的许多人所指出的那样,C#中的数组以及大多数其他常见语言中的数组都是静态大小的。如果你正在寻找更像PHP的数组的东西,我只是想猜你是,因为它是动态大小(和类型!)数组的流行语言,你应该使用ArrayList:

var mahByteArray = new ArrayList<byte>();

如果你有其他地方的字节数组,你可以使用AddRange函数。

mahByteArray.AddRange(mahOldByteArray);

然后你可以使用Add()和Insert()来添加元素。

mahByteArray.Add(0x00); // Adds 0x00 to the end.
mahByteArray.Insert(0, 0xCA) // Adds 0xCA to the beginning.

需要回到阵列吗? .ToArray()让你满意!

mahOldByteArray = mahByteArray.ToArray();

答案 2 :(得分:6)

无法调整数组的大小,因此您需要分配一个更大的新数组,在其开头写入新字节,并使用Buffer.BlockCopy传输旧数组的内容。

答案 3 :(得分:5)

为了防止每次都重新复制数组

使用Stack

怎么样?
csharp> var i = new Stack<byte>();
csharp> i.Push(1);
csharp> i.Push(2); 
csharp> i.Push(3); 
csharp> i; { 3, 2, 1 }

csharp> foreach(var x in i) {
  >       Console.WriteLine(x);
  >     }

3 2 1

答案 4 :(得分:3)

虽然在内部创建了一个新数组并将值复制到其中,但您可以使用Array.Resize<byte>()来获得更易读的代码。另外,您可能需要考虑根据您要实现的目标来检查MemoryStream类。

答案 5 :(得分:0)

简单,只需使用下面的代码,就像我一样:

        public void AppendSpecifiedBytes(ref byte[] dst, byte[] src)
    {
        // Get the starting length of dst
        int i = dst.Length;
        // Resize dst so it can hold the bytes in src
        Array.Resize(ref dst, dst.Length + src.Length);
        // For each element in src
        for (int j = 0; j < src.Length; j++)
        {
            // Add the element to dst
            dst[i] = src[j];
            // Increment dst index
            i++;
        }
    }

    // Appends src byte to the dst array
    public void AppendSpecifiedByte(ref byte[] dst, byte src)
    {
        // Resize dst so that it can hold src
        Array.Resize(ref dst, dst.Length + 1);
        // Add src to dst
        dst[dst.Length - 1] = src;
    }

答案 6 :(得分:0)

我觉得是一个比较完整的功能

/// <summary>
/// add a new byte to end or start of a byte array
/// </summary>
/// <param name="_input_bArray"></param>
/// <param name="_newByte"></param>
/// <param name="_add_to_start_of_array">if this parameter is True then the byte will be added to the beginning of array otherwise
/// to the end of the array</param>
/// <returns>result byte array</returns>
        public byte[] addByteToArray(byte[] _input_bArray, byte _newByte, Boolean _add_to_start_of_array)
        {
            byte[] newArray;
            if (_add_to_start_of_array)
            {
                newArray = new byte[_input_bArray.Length + 1];
                _input_bArray.CopyTo(newArray, 1);
                newArray[0] = _newByte;
            }
            else
            {
                newArray = new byte[_input_bArray.Length + 1];
                _input_bArray.CopyTo(newArray, 0);
                newArray[_input_bArray.Length] = _newByte;
            }
            return newArray;
        }