改变十六进制值的位,vb.net

changing bits in hex value, vb.net

我很好奇,在 vb.net 中可以吗?我想更改用户将以十六进制写入的值的 bit6 和 bit7。算法:

bit6 = bit0 xor bit1 xor bit2 xor bit3

bit7 = NOT (bit1 xor bit3 xor bit4 xor bit5)

例如,如果用户写 &H55,代码会将其更改为 &H85。有可能吗?

我的想法:

        Dim a = &H55

        Dim b As New BitArray(BitConverter.GetBytes(a))

        Dim c As New BitArray(8)

        c.Set(0, b(0))
        c.Set(1, b(1))
        c.Set(2, b(2))
        c.Set(3, b(3))
        c.Set(4, b(4))
        c.Set(5, b(5))
        c.Set(6, b(0) Xor b(1) Xor b(2) Xor b(3))
        c.Set(7, Not (b(1) Xor b(3) Xor b(4) Xor b(5)))

        Dim c2(7) As Byte

        c.CopyTo(c2, 0)

        Dim d = BitConverter.ToUInt32(c2, 0)

但我不确定你是如何通过这个操作从 0x55 得到 0x85 的。

0x55: 0101 0101
0x85: 1000 0101
b6 is 0
b7 is 0
res:  0001 0101 (0x15)

要从 0x55 变为 0x85,您必须更改 b4、b6、b7