Those 22 bytes are:
2 bytes - encoded prefix (tz1, tz2, tz3, KT1);
20 bytes - depending on the address type:
for tz-addresses it's public key hash;
for KT-addresses it's hash of the origination operation (see details in @enforser's answer).
Here is a code on C#, I believe you will understand it :)
var bytes = Hex.Parse("...
Something to note from the accepted answer is that the KT1 addresses do not have a "public key hash". The hash used there is the blake2b 20 byte digest hash of the operation group hash and the index of the origination operation within that group that created the address.
More details here: https://tezos.stackexchange.com/a/2270/5435.
@Groxan is ...