笔记
// @file test.cpp
// @brief 试验一下2字节16进制数转整数
// modbus 回包一个寄存器是2个字节, 如果这2个字节表示的是一个short int, 用程序转一下. 强转也可以.
#include
#include
// 2字节16进制数转int
int WORD_2_int(unsigned short int wIn);
int main()
{
unsigned short int wIn = 0;
wIn = 0xFF9F;
printf("0x%x = %dn", wIn, WORD_2_int(wIn));
// 0xff9f = -97
wIn = 0x0061;
printf("0x%x = %dn", wIn, WORD_2_int(wIn));
// 0x61 = 97
return EXIT_SUCCESS;
}
int WORD_2_int(unsigned short int wIn)
{
int i_rc = 0;
int i_sign = 1;
i_sign = ((wIn & (1 << 15)) > 0) ? -1 : 1;
if (i_sign < 0)
{
// wIn &= ~(1 << 15); // 去掉符号位
wIn -= 1;
i_rc = (~wIn & 0xffff);
}
else {
i_rc = wIn;
}
i_rc *= i_sign;
return i_rc;
}