Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
asdo

char -> int некорректное представление

22.09.2010, 15:43. Показов 1098. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как победить следующую ситуацию?

C++
1
2
3
4
char h='й';  // или char h=137;
int h1=h;
printf("%i", h1); // результат --> -23
printf("%c",h1); // результат --> й
Вопрос: как получить в переменной h1 "нормальное" (десятичное)значение согласно кодовой страницe символа "й" (137) (вообще говоря любого)??

Интересно, что:
C++
1
2
char h=-23;
printf("%с", h); // результат --> й
Интересно бы узнать как вообще получается такая вырожденность -23 и 137 при обращении к ним как к char.
int t=-23, r=130; if (r==t) дает естественно ложь...
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.09.2010, 15:43
Ответы с готовыми решениями:

Как получить int представление char (русские символ cp1251)?
Как получить int представление char (русские символ cp1251)?

Ошибка: cannot convert 'int (*)[50]' to 'int*' for argument '1' to 'void vvod2m(int*, int*, int*, char)'Х2
Матрицы An1*m1 и Bn2*m2 вводить с клавиатуры (размерности >3, m1=n2). Выполнять через подпрограммы. выводит следующие ошибки: 1) cannot...

Реализация функции char *padl(const char *string, int len, int c=' ')
Реализовать функцию возвращающую указатель на новую строку длины len, полученную из string либо удалением лишних символов слева , либо...

3
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
22.09.2010, 16:31
По поводу превращений.
Компилятор воспринимает char как signed char, диапазон значения к-рого - -128 до 127.
137 превращается в -117 (переполнение целочисленного значения или как там его).
Для чара в принципе пофиг - он отобразится нормально.

А с 137 и -23 ты просто что-то напутал

Запусти это, посмотри на коды символов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <stdio.h>
 
int main( int argc, char* argv[] )
{
    setlocale( LC_ALL,"Russian" );
    char h = 137;
    int h1 = h;
    printf( "%c", h );
    printf( "%i", h );
    printf( "%c", h1 );
    printf( "%i", h1 );
 
    return 0;
}
0
8 / 8 / 0
Регистрация: 25.08.2010
Сообщений: 21
22.09.2010, 16:41
ну во-первых не 137, а 233 для unsigned char. 'й' в (signed) char будет действительно -23. Преобразовывает всё верно
0
asdo
22.09.2010, 16:51
Проблема решена!
Andrew_Lvov, благодарю за подсказку.

C++
1
2
unsigned char h=137;
printf("%i", h); //результат -->> 137
Насчет -23 и -117.
-23 получается если вводить символ "й" в исходнике. компилятор работает с win1251.
если вводить 137 в лоб (или в 866) то получается -119 ))) почти угадал. но это не так важно, главное - проблема решена, т.к. конечная цель всего этого - использование кода символа как индекс (при обращении к массиву). поэтому существенно -119 или 137.
обратно в char все преобразовывалось и так без проблем.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.09.2010, 16:51
Помогаю со студенческими работами здесь

Error C2040:strnset_2:"char *(char *,int,unsigned int)" отличается по уровням косвенного обращения от "int ()"
Не могу найти в чём ошибка. error C2040: strnset_2: &quot;char *(char *,int,unsigned int)&quot; отличается по уровням косвенного обращения от...

как осуществить приведение типов....(int) char ; (char) int;
Подскажите пожалуйста. мне нужно перевести программу с билдера на дельфи. Есть некоторые нюансы. 1) как осуществить приведение...

Форматирование строк, char to int & int to char
Покажите как запихнуть число в строку и вытащить его обратно из строки. Вот всё просто в pawn str_to_num(const str) // Тупо...

Как превести из char* в int и наоборот из int в char*?
Как превести из char* aa='123' в int aa=123 и наоборот из int в char* . Понимаю что самому написать функцию не сложно, но наверняка это...

Подскажите пожалуйста с int main(int argc, char*argv[])
Если я правильно понимаю, то int argc это передача аргумента программе, т. е если argc&gt;1 то программе передан хотя бы один аргумент,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru