use exactly 21 bytes for int -> str buffer
only allocate the buffer if we need it