I think there is some misconception, or we don't get your question right... One cannot create a "receive address" for an existing address. An address is based on a specific private/public key pair. I recommend looking up some fundamentals on wallets and the creation of addresses. A wallet is a collector of many keys, and one of the keys is used for (a generated) receive addresses. I think what you are asking might go into the direction of HD wallets... I provide some hints at the end.
In short, how to come from a string to an address: you have a private key (which can be your hexadecimal string), which is linked by ECDSA logic to a public key. This pubkey is hashed, some version bit and checksum logic, and finally base58 encoded. Look at this page here, it shows the different steps. Also here in stackexchange was a discussion specifically for compressed pubkeys, as the uncompressed keys aren't used widely anymore.
As long as you create many private/public keypairs (based on sha256 and "strings"), you can generate as many addresses as you like, and use one of them as receive address. However keep in mind, that if you generate yourself private/public keypairs, you are running into a trap! The keys need to be based on a certain randomness, and if you don't get it right, you will loose your funds. You have been warned :-)
Andreas' book "Mastering Bitcoin" is an amazing book that'll definitely get you some further insights. It's freely available online here. The chapter 4 on keys and 5 on wallets is what you'd be interested in :-)