varargs are sign-extended to 32-bit, so you should read the full 32 bits and then truncate if you need to