void Generic::IntToS16 (S16 & Out_, int & In_){
unsigned char * bytes_in = reinterpret_cast<unsigned char*> (&In_);
unsigned char * bytes_out = reinterpret_cast<unsigned char*> (&Out_);
bytes_out[1] = bytes_in[1];
bytes_out[0] = bytes_in[0];
bytes_out[1] |= bytes_in[sizeof(int)-1] & 1<<7;
}
---OR---
short Generic::IntToS16 (int In_){
short ret = static_cast<short>(In_);
return ret;
}