Я думаю, что это было бы более уместным (хотя это зависит от того, как используется d):
byte[] des16 = new byte[16];
IEnumerable<byte> d = des16.Skip(8);
Используя чистый управляемый код, вы не можете использовать указатели на местах. Так как d принимает указатель на 8-й элемент массива, ближайший аналог будет создавать перечисление des16, пропускающего первые 8 элементов. Если вы просто перебираете элементы, это будет лучший выбор.
Следует также упомянуть, что Skip()
является одним из многих методов расширения, доступных для массивов (и других IEnumerable
с) в .Net 3.5 (VS2008/VS2010) и до которых я мог предположить только, что вы использовали. Вы не сможете использовать его, если используете .Net 2.0 (VS2003/VS2005).
Если d используется для доступа к элементам смещения в des16, как массив, он также может быть преобразован в массив.
byte[] d = des16.Skip(8).ToArray();
Примечание это создает отдельный экземпляр массива, который содержит элементы в des16 за исключением первого 8.
В противном случае это не совсем понятно, что лучшее использование было бы не видеть, как она используется.
[править]
Оказывается, вы работаете со строками с завершающим нулевым в буфере в .Net 2.0, возможно (если Skip()
не доступен). Если вам требуется представление строки, вы можете преобразовать его в собственный строковый объект.
byte[] des16 = new byte[16];
char[] chararr = Array.ConvertAll(des16, delegate(byte b) { return (char)b; }); //convert to an array of characters
string str = new String(chararr, 8, chararr-8); //create the string
Верно, но для этого потребуется некоторое объяснение для C++-go-er. – Dykam
Point принят. Я должен уточнить. –
Спасибо, ребята, но все-таки не он. «System.Array» не содержит определения для «Пропустить». – edv4ld0