I get the impression that "i" should always represent a numeric digit ('0' to '9'). Then you can also do this:
st[Length(st)] := char(ord('0') + i);
If the input string is UTF8 encoded you must make sure that it has a single-byte code point at the end (i.e. < 128).