【问题标题】:Converting 2 chars to its ascii binary code将 2 个字符转换为其 ascii 二进制代码
【发布时间】:2015-07-15 04:58:02
【问题描述】:

我正在从加速度计读取字符格式的二进制数据,它由高字节和低字节组成。自从我使用 C++ 以来已经有很长时间了,而且通常只使用更高级别的东西。 我有以下功能:

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

如何将这些值转换为整数? 据我所知, atoi 的工作方式不同(例如“21”= 21)。 我可以将 char 类型转换为 int 吗?但是它如何与高位和低位一起工作? 提前感谢您的帮助!

【问题讨论】:

    标签: c++ casting binary


    【解决方案1】:

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

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

    您可能还想使用无符号短。这取决于您的期望。

    【讨论】:

    • 你中途停了下来:uint8_t 将是 8 位参数的正确类型。 char(无论有没有签名)实际上可能没有。结果相同:使用uint16_t。请注意,您需要转换操作的结果,因为那是int,而不是shortuint16_t。否则您可能会收到截断警告(取决于 sizeof(int) )。
    • 我只是使用了他问题中的类型..但你对演员阵容是正确的。
    • 演员表是多余的; return 表达式无论如何都会转换为返回类型
    • @MattMcNabb 强制转换是多余的,但一些编译器警告说隐式强制转换为更小的数据类型。
    猜你喜欢
    • 2012-03-30
    • 2016-10-02
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多