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

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
dmitry1208197320
Сообщения: 16
Зарегистрирован: 13 янв 2010, 17:48

Подскажите, пожалуйста, как это можно сделать?
IceFlame
Сообщения: 62
Зарегистрирован: 29 ноя 2009, 03:54

Ну, например,

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

int a;
char b;
b = (char) a;
Или надо преобразовывать целое число в строку?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

На Win32 тип int имеет размер 4 байта, а char - 1 байт. Таким образом "честное" преобразование int в char невозможно. Возможно лишь преобразование с усечением (truncation). Самое распространенное усечение - это отбрасование старших байт. Как это сделать продемонстировал IceFlame.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
dmitry1208197320
Сообщения: 16
Зарегистрирован: 13 янв 2010, 17:48

Спасибо за ответ!
eqltv
Сообщения: 6
Зарегистрирован: 05 фев 2010, 14:22

IceFlame писал(а):Ну, например,

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

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

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

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

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

b = static_cast<char>(a);
dmitry1208197320
Сообщения: 16
Зарегистрирован: 13 янв 2010, 17:48

спасибо, учту
BulldozerBSG
Сообщения: 270
Зарегистрирован: 09 янв 2010, 04:14
Контактная информация:

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

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

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

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

b = static_cast<char>(a);

А не одна ли малина, или компилятор код разный генерирует? :)
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

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

Будет ли сгенерирован другой код? Для static_cast не будет. Однако static_cast более безопасен, так как помимо преобразования как такового, на этапе компиляции он дополнительно осуществляет валидацию правильности преобразования. Любой тип скастить в либой тип с помощью static_cast нельзя: в случае несоответствия будет выдана ошибка компиляции.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить