我的阵列看起来像这样
17 8B 01 00 03 EA 05 00 14 0A 00 00 03 EA 05 00 14 0A 00 00 00 00 00 FF FF FF FF FF FF FF FF
我想在索引1(8B)之后添加一个额外的字节0x00,并将其余的字节移到右边.这个数组是32字节长,加上额外的字节(0x00)之后,我希望它保持与32字节相同的长度我不在乎,如果我最后删除FF,因为它的备用字节.所以新数组看起来应该是这样的
17 8B 00 01 00 03 EA 05 00 14 0A 00 00 03 EA 05 00 14 0A 00 00 00 00 00 FF FF FF FF FF FF FF FF.
我怎么能在c#中做到这一点?
如果Array.Copy()在后台使用then,它将使用非常有效的处理器指令来移动数据:
byte[] array = { 0x17, 0x8B, 0x01, 0x00, 0x03, 0xEA, 0x05, 0x00, 0x14, 0x0A, 0x00, 0x00, 0x03, 0xEA, 0x05, 0x00, 0x14, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
int positionToInsert = 2;
byte valueToInsert = 0;
Array.Copy(array, positionToInsert, array, positionToInsert+1, array.Length-positionToInsert-1);
array[positionToInsert] = valueToInsert;
Run Code Online (Sandbox Code Playgroud)
Array.Copy() 专为正确处理重叠副本而实现。
你可以这样做:
public static void InsertByte(byte[] array, int index, byte value)
{
// shifting all bytes one spot. (from back to front)
for (int i = array.Length - 1; i > index; i--)
array[i] = array[i - 1];
// assigning the new value
array[index] = value;
}
public static byte[] InsertByteInCopy(byte[] array, int index, byte value)
{
byte[] copy = array.ToArray();
InsertByte(copy, index, value);
return copy;
}
Run Code Online (Sandbox Code Playgroud)
更改数组的当前实例可以更好地提高性能。
使用 Array.Copy 将执行类似以下操作:(未经测试)
public static void InsertByte2(byte[] array, int index, byte value)
{
Array.Copy(array, index, array, index + 1, a.Length - index - 1);
array[index] = value;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
631 次 |
| 最近记录: |