Разбор массива байт соответственно форматирующей строке - C#
Формулировка задачи:
пробую так:
индекс вычисляется верно, но данные не записываются в елементы массива при возвращении из функции, может я какое ключевое слово пропустил?
public static int ScanPack2(byte[] buff, ref int idx, string fs, ref dynamic[] v)
{
for (int i = 0; i < fs.Length; i++)
{
switch (fs[i])
{
case 'c':
if (v[i] != null) v[i] = (byte)buff[idx];
idx += 1;
break;
case 'h':
if (v[i] != null) v[i] = BitConverter.ToInt16(buff, idx);
idx += 2;
break;
case 'd':
if (v[i] != null) v[i] = BitConverter.ToInt32(buff, idx);
idx += 4;
break;
case 'q':
if (v[i] != null) v[i] = BitConverter.ToInt64(buff, idx);
idx += 8;
break;
case 's':
v[i] = (string)ByteArrayToString(buff, ref idx);
break;
default: return idx;
}
}
return idx;
}
ну что, на столько глупый вопрос что нет ответа?)
Решение задачи: «Разбор массива байт соответственно форматирующей строке»
textual
Листинг программы
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct S
{
public int a;
public ulong b;
public short c;
}
static unsafe T read<T>(byte[] buff)
{
fixed (byte* p = buff)
{
return (T)Marshal.PtrToStructure(new IntPtr(p), typeof(T));
}
}
unsafe static void Main(string[] args)
{
byte[] buff = new byte[100];
S s = read<S>(buff);
}