convert_1_to_0() et al are only called for strings that don't have any characters that don't fit in the narrower string. ie the thrown away part is always all zeroes. cf find_magnitude*().
I see. Is there currently a function which does a kind of cast_1_to_0(), i.e. which actually throws out characters which are too wide to be converted?