Страница 1 из 1

Как в С++ преобразовать тип int в тип char

Добавлено: 01 фев 2010, 10:34
dmitry1208197320
Подскажите, пожалуйста, как это можно сделать?

Re: Как в С++ преобразовать тип int в тип char

Добавлено: 01 фев 2010, 10:57
IceFlame
Ну, например,

Код: Выделить всё

int a;
char b;
b = (char) a;
Или надо преобразовывать целое число в строку?

Re: Как в С++ преобразовать тип int в тип char

Добавлено: 01 фев 2010, 11:32
Romeo
На Win32 тип int имеет размер 4 байта, а char - 1 байт. Таким образом "честное" преобразование int в char невозможно. Возможно лишь преобразование с усечением (truncation). Самое распространенное усечение - это отбрасование старших байт. Как это сделать продемонстировал IceFlame.

Re: Как в С++ преобразовать тип int в тип char

Добавлено: 01 фев 2010, 12:13
dmitry1208197320
Спасибо за ответ!

Re: Как в С++ преобразовать тип int в тип char

Добавлено: 05 фев 2010, 20:49
eqltv
IceFlame писал(а):Ну, например,

Код: Выделить всё

int a;
char b;
b = (char) a;
Это язык си, а вопрос был про C++. В плюсах лучше писать так:

Код: Выделить всё

b = char(a);
или еще лучше (понятнее)

Код: Выделить всё

b = static_cast<char>(a);

Re: Как в С++ преобразовать тип int в тип char

Добавлено: 05 фев 2010, 21:28
dmitry1208197320
спасибо, учту

Re: Как в С++ преобразовать тип int в тип char

Добавлено: 05 фев 2010, 21:37
BulldozerBSG
eqltv писал(а):Это язык си, а вопрос был про C++. В плюсах лучше писать так:

Код: Выделить всё

b = char(a);
или еще лучше (понятнее)

Код: Выделить всё

b = static_cast<char>(a);

А не одна ли малина, или компилятор код разный генерирует? :)

Re: Как в С++ преобразовать тип int в тип char

Добавлено: 06 фев 2010, 13:24
Romeo
BulldozerBSG, ну если начинать говорить о С++ преобразованиях типов, то это целая отдельная и очень интересная тема со своей собственной философией. Можем обсудить все тонкости, если хочешь... или если кто-нибудь из посетителей хочет :)

Будет ли сгенерирован другой код? Для static_cast не будет. Однако static_cast более безопасен, так как помимо преобразования как такового, на этапе компиляции он дополнительно осуществляет валидацию правильности преобразования. Любой тип скастить в либой тип с помощью static_cast нельзя: в случае несоответствия будет выдана ошибка компиляции.