public static unsafe bool CheckBit(this INativeStruct self, int startOffset, int bit) { var byteOffset = bit / 8; var bitOffset = bit % 8; var p = self.Pointer + startOffset + byteOffset; var mask = 1 << bitOffset; var val = *(byte *)p.ToPointer(); var masked = val & mask; return(masked == mask); }
public static unsafe void SetBit(this INativeStruct self, int startOffset, int bit, bool value) { var byteOffset = bit / 8; var bitOffset = bit % 8; var p = self.Pointer + startOffset + byteOffset; var mask = ~(1 << bitOffset); var ptr = (byte *)p.ToPointer(); var val = *ptr; var newVal = (byte)(val & mask | ((value ? 1 : 0) << bitOffset)); *ptr = newVal; }