2015-04-01 121 views
1

我正在从加速度计读取字符格式的二进制数据,它由高位字节和低位字节组成。我从事C++工作很长时间,通常只使用更高层次的东西。 我有以下功能:将2个字符转换为ascii二进制代码

short char2short(char* hchar, char* lchar) 
{ 
    char temp[2]; 
    temp[0] = *hchar; 
    temp[1] = *lchar; 

我怎样可以得到的值转换为一个整数?据我所知,atoi的作用不同(例如“21”= 21)。 我可以只将char转换为int吗?但是它如何处理更高位和更低位? 在此先感谢您的帮助!

回答

1

您应该将字节存储为无符号位,以避免移位符号位的问题。

short char2short(unsigned char hchar, unsigned char lchar) 
{ 
    return static_cast<short>(lchar | (hchar << 8)); 
} 

您可能还想使用unsigned short。这取决于你的期望。

+0

你中途停下来:'uint8_t'是8位参数的正确类型。 char(有符号或无符号)实际上可能不是。结果相同:使用'uint16_t'。请注意,您需要投射操作的结果,因为它是'int',而不是'short'或'uint16_t'。否则,你可能会得到一个截断警告(取决于'sizeof(int)')。 – Olaf 2015-06-03 02:47:45

+0

我只是在他的问题中使用了这些类型..但是你对演员表是正确的。 – 2015-07-14 20:58:13

+0

剧组是多余的;无论如何,'return'表达式被转换为返回类型 – 2015-07-15 01:35:10

相关问题