Два варианта:
- используйте
unsafe
код или злоупотребление явный макет struct
(как объединение), чтобы тихо разорвать его на куски
- использовать сменные операции
Обычно я предпочел бы последнее; т.е.
uint x = (uint)(value & 0xFFFFFFFF), y = (uint)((value >> 32)&0xFFFFFFFF)
В дополнение к работе в большем количестве сред (не все виртуальные машины допускают unsafe
), это позволяет избежать риска путаницы на машине с другим порядком байтов (возможно, с использованием Mono).
Версия unsafe
будет выглядеть примерно так:
uint* ptr = (uint*)(void*)&value;
uint x = ptr[0], y = ptr[1];
Для чего быстрее: попробуйте оба варианта и время t! Микрооптимизация может быть оценена только в определенном кодовом контексте.