如何将双精度转换为无符号字符?

2 c++ double casting type-conversion unsigned-char

我正在寻找使用 C++ 将双精度向量更改为无符号字符。为了确保它有效,我写道:

unsigned char x = 0;
double y = 4.6;
x = (unsigned char) y;
printf("%d", y);
cout << endl << "the char of 4.6 is: " << x;
getchar();
Run Code Online (Sandbox Code Playgroud)

但是我得到的不是等于 4 或 5 的字符,而是一个巨大的数字,例如 1717986918 或带有 cout 的菱形符号。

我认为这是因为它将 4.6 解释为“4.6”,但有没有办法保存它,因此它只是成为接近相等值的无符号字符?

sya*_*yam 6

带 cout 的菱形符号

(unsigned char)4.6被截断为4.

但是当你coutachar它打印相应的字符(例如cout << char(65)将打印A)。如果你想打印你的char那么你需要先将它转换为更宽的整数类型,例如:

double y = 4.6;
char x = y;     // x == 4
cout << (int)x; // prints "4"
//      ^^^^^
Run Code Online (Sandbox Code Playgroud)

我得到了一个巨大的数字,比如 1717986918

问题在于您的printf%d = signed integer与您提供的参数 (a char)相比,您使用了错误的格式说明符 ( )。但你已经想通了,我只是让我的答案完整。;)

同样,您可能想先投射它:

printf("%d", (int)x);
Run Code Online (Sandbox Code Playgroud)