By “single digit” you mean like 0.1? If so, then no, that’s not the case. That way you would have only 10 possible values per color channel, which is way too few. Instead, you have 256 values, just like with any other representation, so 1.0 means 255 or 0xff. No difference at all, just another way of writing the same thing.
If, however, you want to use 0-255 or 0x0-0xff representation for pure convenience reasons, you can do it too. For instance:
def hexColor(hexr, hexg, hexb, hexa):
hc = [hexr, hexg, hexb, hexa]
color = Vec4()
for i in range(4):
color[i] = 1.0 / float(int(hc[i], 16))
It can be written better, so you can pass the whole hex value instead of per channel, but that’s just a quick example.
Try running this code along with some color picker (like gcolor2, if you’re on Linux). It fills the screen with black and increases the red channel value by 1.0/255.0 whenever you press “v” on your keyboard. Press “v” and check the displayed color with the color picker. You will see that the value goes through the whole spectrum.