Problem is (and I find this SUPER surprising), I'm discovering that Arduino has no convenient way to either: a) convert an integer to a string, or b) grab a substring of a given string.
Problem is, the Arduino has very little memory, and a full implementation of sprintf, with all those left/right justification formats, hex/decimal/string formats is very memory-hungry, as is general string handling. But, it does have these functions.
However, yes, there are other ways around these, not at all hacky.
Constant tables spring to mind.