当我从int转换为char时,如何在[0,255]之外得到一个数字?

时间:2015-06-22 03:49:56

标签: c++ char type-conversion

我不明白为什么从int转换为char会给我一个超出(char)范围的数字?这是我的C ++程序:

#include <cmath>
#include <stdio.h>
int main(){
  printf("%c\n",(char) 246 );
  printf("%d\n", (char) (246) );
}

我得到了

\366
-10

任何解释?我需要的是从int转换为char

char int2char(int i);

返回截断的&#39; i&#39;到了char。当然,有人可以通过某些(i mod 256)执行此操作,但我正在寻找一种使用类型转换来执行此操作的方法。任何的想法?

3 个答案:

答案 0 :(得分:4)

执行时:

char c = 246;
int i = c;
printf("%d\n", i);

相当于执行:

char c = 246;

棘手的部分是行

中发生的事情
246

11110110在{bin>中存储为char

在您的平台上,signed似乎是char。当signed-10时,该二进制数的整数值等于c。因此,-10的值设置为i-10的值也设置为value

答案 1 :(得分:3)

原生char类型可以是已签名或未签名。它似乎已在您的计算机上签名。

如果您想确保结果在[0, 255]范围内,请改用unsigned char

static_cast<unsigned char>(246)

答案 2 :(得分:1)

您的C ++编译器将char视为签名的 8位整数,范围为-128到127,而不是无符号 8位整数范围为0到255。

问题不在于int - 到 - char转换,而是char - 到 - int转换,可以通过强制转换来完成({ {1}}或i = (unsigned char) c)或位掩码(i = static_cast<unsigned char>(c))。