You don't need a char type to implement SHA-256. You can do the padding CPU-side, it's not something the GPU can do well in the general case. But if you have a fixed input size you can do the padding GPU-side using bit masks (without needing char types, just plain ints). In practice though a general purpose implementation is always going to suck hard in terms of performance in a parallel environment - where any existing overhead is magnified hundred-fold - so you have to tune the code to your needs by optimizing parts that you know will always work the same (for instance, fixed input sizes, constant prefix/suffix, characteristics of the output hash you are looking for, all this stuff you can use to make the GPU code leaner).
Essentially, to put it bluntly: if you need a char type to implement SHA256 on the GPU, you're either not optimizing well enough, or you don't know enough about your target inputs and outputs to make efficient use of the GPU in the first place.
There are tons of both OpenCL and CUDA solutions out there. As far as I know most graphics cards support DirectX, but not OpenCL or CUDA. Also, I think, if there are compute shaders, which are meant to not only be used for graphical purposes, why didn't they add a 1 byte data type? Its pretty basic for general purpose calculations.
Sure, but how many graphics card support DX10/DX11 compute shaders and at the same time don't support some flavour of OpenCL/CUDA? Every NVIDIA card in the past three years or so has had CUDA. OpenCL has been around for around four years. DX11 is not much older than that. And if you want optimal number-crunching performance you pretty much need to use them to do all the low-level tweaks needed to get the real speed benefits. Compute shaders are not slow, but they were designed for graphics interop in mind, and are less configurable than full-blown compute languages.