2016-03-16 5 views
-4

byte [] myFile = File.ReadAllBytes ("d: \ 123.xml"); Я хочу вставить некоторый символ после каждого байта в массив байтов myFile. Если длина массива байтов myFile равна 5000, после вставки она станет 10000. Как я могу написать C#?Вставить байт в байтовый массив?

+0

Вы можете создать еще один массив, в два раза больше, а затем перебирать 'myFile' и для каждого байта скопировать значение для нового массива, а затем добавить после него необходимый байт. Вы можете обнаружить, что для работы такого типа проще использовать «Список ». Если вам нужно работать с одним и тем же байтовым массивом, вам необходимо предварительно распределить массив в два раза дольше, чем файл, и работать в обратном порядке. –

+0

Учитывая, что какое-либо исследование показало, что вы не можете изменять размер массива, что еще вы пробовали? – CodeCaster

+0

, если вы вставляете символ после каждого байта, ваш файл будет в три раза больше. – Jodrell

ответ

0
var newArr = new int[10000]; 
for (int i = 0; i < 10000; i++) 
{ 
    if (i % 2 == 0) 
    { 
     newArr[i] = myFile[i/2]; 
    } 
    else 
    { 
     newArr[i] = (byte)someChar; 
    } 
} 
+0

Это сбой. Вам нужно рассчитать старый индекс на основе нового в вашей ветви if. – nvoigt

+0

Да, извините, вы правы. Я изменил код – Pixel

2

Вы не можете вставить в массив. Массив - фиксированная длина.

Вы можете использовать List<byte>, если вы хотите вставить конкретные байты, или вы можете использовать силу LinQ для построения нового массива.

Это будет вставить нулевые байты после каждого байта у вас уже есть, например:

var inserted = myFile.SelectMany(b => new []{ b, (byte)0 }).ToArray(); 
+0

спасибо за вашу помощь, но «(байт) 0» в вашем фрагменте кода не будет запускаться – user2207102

+0

ошибка: недопустимый анонимный тип объявления-члена. Члены анонимного типа должны быть объявлены с назначением членов, простым именем или доступом к члену. – user2207102

+0

@ user2207102 Извините, забыли пару скобок. – nvoigt

Смежные вопросы