将二进制编码的无符号字符转换为整数

Conversion of binary encoded unsigned char to integer

本文关键字:转换 整数 字符 无符号 二进制 编码      更新时间:2023-10-16

在下文中,我将二进制中的数字 15 编码为无符号字符,然后将其转换为整数。但是,当我用 int8_t 替换 int 时,它不再输出 15。我不明白为什么。int8_t的大小不是 8 位,所以它应该与 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;
}

你看到的(实际上是你没有看到的(是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;
}