Как в С++ преобразовать тип int в тип char
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
-
- Сообщения: 16
- Зарегистрирован: 13 янв 2010, 17:48
Подскажите, пожалуйста, как это можно сделать?
Ну, например,
Или надо преобразовывать целое число в строку?
Код: Выделить всё
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" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
-
- Сообщения: 16
- Зарегистрирован: 13 янв 2010, 17:48
Спасибо за ответ!
Это язык си, а вопрос был про C++. В плюсах лучше писать так:IceFlame писал(а):Ну, например,Код: Выделить всё
int a; char b; b = (char) a;
Код: Выделить всё
b = char(a);
Код: Выделить всё
b = static_cast<char>(a);
-
- Сообщения: 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 нельзя: в случае несоответствия будет выдана ошибка компиляции.

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