在c#中将ulong解析为两个uint变量

Joe*_*eky 4 c# performance parsing

我有一系列ulong实例,每个实例包含两个单独的值.前4个字节代表一个uint值,后4个字节代表另一个.解析ulong为两个uint变量的最有效方法是什么?这将发生在紧密的循环中,所以我正在寻找最快的模式.

Mar*_*ell 9

两种选择:

  • 使用unsafe代码或滥用显式布局struct(作为联合)以静默方式将其撕成碎片
  • 使用轮班操作

我通常更喜欢后者; 即

uint x = (uint)(value & 0xFFFFFFFF), y = (uint)((value >> 32)&0xFFFFFFFF)
Run Code Online (Sandbox Code Playgroud)

除了在更多环境中工作(并非所有VM都允许unsafe)之外,这还避免了在不同端机器上出现混淆的风险(可能使用Mono).

unsafe版本将是这样的:

uint* ptr = (uint*)(void*)&value;
uint x = ptr[0], y = ptr[1];
Run Code Online (Sandbox Code Playgroud)

为此更快:尝试是选项和时间t!微优化只能在特定的代码上下文中进行评估.