将二进制编码的unsigned char转换为整数

时间:2017-08-09 18:59:04

标签: c++ binary char

在下文中,我将二进制数15编码为unsigned char,然后将其转换为int。但是,当我用int8_t替换int时,它不再输出15。我不明白为什么。是不是int8_t 8位的大小,所以它应该与char匹配得很好,char也是8位?

#include <iostream>
#include <string.h>

int main()
{

  unsigned char binValue = 0<<7 | 0<<6 | 0<<5 | 0<<4 | 1<<3 | 1<<2 | 1<<1 | 1<<0; // this is 15 in binary

  int intValue  = (int)binValue;

  // memcpy(&intValue,&binValue,sizeof(int)); // Or this one

  std::cout << intValue << std::endl;

  return 0;
}

1 个答案:

答案 0 :(得分:3)

你所看到的(实际上你看不到的)是cout,当int8_t被用时,将值解释为字符,而ASCII码15可能不会离开调试控制台上可见的任何内容。请注意,环境(例如我的)可能会定义int8_t,如下所示:

// _int8_t.h:
#ifndef _INT8_T
#define _INT8_T
typedef __signed char       int8_t;
#endif /* _INT8_T */

如果您将binValue更改为47,那么您会看到'/'。 要将字符类型(或int8_t)打印为十进制,请在打印过程中将其转换为int:

int main()
{
    unsigned char binValue = 0<<7 | 0<<6 | 1<<5 | 0<<4 | 1<<3 | 1<<2 | 1<<1 | 1<<0;
    // changed to 47 for demonstration purpose

    int8_t intValue  = (int8_t)binValue;

    std::cout << "as char:" << intValue << std::endl;
    std::cout << "as decimal:" << (int)intValue << std::endl;
    std::cout << "as decimal:" << +intValue << std::endl;

    return 0;
}