Как преобразовать двойной в беззнаковый символ?

Я ищу, чтобы изменить вектор двойников в беззнаковых символов с помощью 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();

но вместо того, чтобы символ был равен 4 или 5, я получаю огромное число, например 1717986918
или алмазный символ с кутом.

Я предполагаю, что это потому, что он интерпретирует 4.6 как «4.6», но есть ли способ сохранить его, чтобы он просто стал беззнаковым символом почти равного значения?

1

Решение

алмазный символ с кут

(unsigned char)4.6 усекается до 4,

Но когда ты cout char он печатает соответствующий символ (например, cout << char(65) распечатает A). Если вы хотите распечатать значение вашей char затем вам нужно сначала привести его к более широкому целому типу, например:

double y = 4.6;
char x = y;     // x == 4
cout << (int)x; // prints "4"//      ^^^^^

Я получаю огромное количество, как 1717986918

Проблема с вашим printfвы используете неверный спецификатор формата (%d = signed integer) по сравнению с аргументом, который вы предоставляете ( char). Но вы уже поняли это, я просто заканчиваю свой ответ. 😉

Опять же, вы, вероятно, хотите сначала разыграть это:

printf("%d", (int)x);
4

Другие решения

Я предполагаю, что вы понимаете, что char может содержать только целую часть двойного числа и в большинстве случаев тоже 255 (поэтому, как правило, двойные числа преобразуются в char * в строки, если вам нужно полное число). Итак, что вы действительно ищете, так это приведение целочисленной части двойного числа к типу char, чтобы лексическое приведение сработало бы (или даже функции stringstream). Например:

#include <boost/lexical_cast.hpp>int main() {
unsigned char x;
double y = 4.6;
x = boost::lexical_cast<unsigned char>((int)y);
printf("%f", y);
std::cout << std::endl << "the char of 4.6 is: " << x;
}
2

printf("%d", y);

Это просто ошибка — y двойной, а %d спецификатор формата для целых чисел.

Но главная проблема — логическая проблема — вы путаете числа с их представлениями. Когда вы печатаете символ № 4, нет никаких оснований ожидать, что он будет выглядеть как десятичная цифра «4».

0
По вопросам рекламы [email protected]