One simple solution for level conversion involves a CD4050 hex non-inverting buffer. This particular device allows the input voltage to exceed the power supply voltage, and the output will be limited by the power supply voltage.
I have (in the past) successfully used this particular device to convert 5V outputs from an Arduino Uno 'compatible' device to a 3.3v device that was (according to the spec sheets) NOT 5V tolerant on its inputs. The arduino WILL accept 3.3v logic levels, though. So there was no need to perform any level conversion going back the other way.
In short, you power the CD4050 with whatever logic voltage level you want. In my case that was a 3.3v regulated power supply. Then you connect the 5V logic to the input of one of the gates, and the output of the gate to the 3.3v logic. The CD4050 can drive 2 TTL gates from any of its outputs, so there's no problem connecting to any device that I'm aware of.
CD4050 digikey part (16-pin DIP; also available as surface mount)