sscanf assumes the variables you pass are at least of size int (either that, or of size long -- but I'd wager it's more likely int).
Because uint16 is smaller than an int (2 bytes instead of most likely 4), sscanf is writing outside of your buffer which causes memory corruption, which is why your program is crashing.
To fix this, make all your variables ints instead of uint16s. If the variables must be uint16s, call sscanf with temporary ints, and then copy those ints to your real variables.