public HexString(string data)
if ((data.Length & 1)!= 0) throw new ArgumentException("Hex string must have an even number of digits.");
_data = Enumerable.Range(0, data.Length)
.Select(x => Convert.ToByte(data.Substring(x, 2), 16))
public HexString(byte[] data)
public override string ToString()
string hex = BitConverter.ToString(_data);
return hex.Replace("-","");
static public HexString operator ^(HexString LHS, HexString RHS)
static public void Main()
HexString bdk1 = new HexString("8D10DA193E98524379264ADFFD043632");
HexString bdk2 = new HexString("8C339F7EB7339FAC87FAF0478B500422");
const string expected = "0123456789ABCDEFFEDCBA9876543210";
HexString actual = bdk1 ^ bdk2;
Console.WriteLine("Expected: " + expected);
Console.WriteLine("Actual : " + actual);