Ein "long" ist doch mehr oder weniger auch ein "Integer" halt nur etwas größer.
Das hast du hoffentlich nur spaßig gemeint.

Oder schaffst du es einen vollen 10 Liter Eimer komplett in eine 1/4 Liter Kaffetasse zu füllen, ohne das dabei etwas verloren geht.
Wenn du einen long Wert von 40000 hast und in eine int16 Variable schreibst, dann wird das Ergebnis vermutlich ein negativer int Wert sein. Sieh dir mal die Ranges der Datentypen an.

Und noch was. Da du nie von itoa geschrieben hattest bzw das auch nicht so in der main stand, die du hier reingestellt hattest, hätte ich mich noch dumm und dämlich raten können, wo der Fehler liegt.
Es ist wichtig, auch wenn es dir vielleicht nichtig erscheint, möglichst alle Eigenkreationen im Code mit zu zeigen.