(с использованием небезопасного кода). В следующем примере показано, как заполнить 16-байтовый массив двумя длинными значениями, что BitConverter все еще не может сделать без дополнительной операции копирования:
byte[] bar = new byte[16];
long lValue1 = 1;
long lValue2 = 2;
unsafe {
fixed (byte* bptr = &bar[0]) {
long* lptr = (long*)bptr;
*lptr = lValue1;
// pointer arithmetic: for a long* pointer '+1' adds 8 bytes.
*(lptr + 1) = lValue2;
}
}
Или выможет создать собственный метод StoreBytes ():
// here the dest offset is in bytes
public static void StoreBytes(long lValue, byte[] dest, int iDestOffset) {
unsafe {
fixed (byte* bptr = &dest[iDestOffset]) {
long* lptr = (long*)bptr;
*lptr = lValue;
}
}
}
Считывание значений из байтового массива не является проблемой для BitConverter, поскольку вы можете указать смещение в .ToInt64.
Альтернатива: использовать Buffer.BlockCopy, который может конвертировать типы массивов.