С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/22: Рейтинг темы: голосов - 22, средняя оценка - 4.77
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139

Влияет ли манипуляторы hex,oct,dec на массив символов?

04.06.2011, 16:53. Показов 4448. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Влияет ли манипуляторы hex,oct,dec на массив символов?

есть unsigned char str[LEN];
Ввожу и так cin >> hex >> str;
и так cin >> str;
Результат один и тот же, хотя если бы вместо str была бы переменная типа int, то при вводе числа 45 получилось бы в итоге 69.

И еще, коды в переменных типа char и числа в int всегда записываются в десятичной системе исчисления, т.е. что бы не вводил в итоге будет число в десятичной системе исчисления?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.06.2011, 16:53
Ответы с готовыми решениями:

Перевод чисел Bin - Oct - Dec - Hex
Существуют ли функции для перевода числа (или строки из цифр) из одной системы счисления (по основанию 2, 8, 10, 16) в другую. Как из...

Манипуляторы dec hex setfill setw
что такое операторы dec hex setfill sew м как они работают?

Перевод dec в hex и oct
Здравствуйте, форумчане! Есть такое задание: Написать на ассемблере программу, которая получает из стандартного ввода целое число в...

8
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
04.06.2011, 17:37
Вот здесь Неочевидные ответы на простые вопросы почитай раздел 8, может ясности в вопросе прибавится
1
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
04.06.2011, 18:18  [ТС]
Со вторым вопросом понятно, но не с первым.

C++
1
2
int a;
cin >> hex >> a;
Допустим, ввожу число 45. Вводится в шестнадцатеричной форме записи числа, потом преобразуется в десятеричную 45>69 и записывается в переменную a;

Итак,
char - это обычный целочисленный тип: такой же по природе, как int, но другого размера.
Ввожу символ t, код которого 116. В результате должно записаться число 278, но записывается число 116. Если char - это тот же int(размер я так понимаю не важен), тогда почему 116 не преобразовалось в 278?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
04.06.2011, 18:30
Дело в том, что работа cin'а по сути дела зависит от того, как перегружены операторы для разных типов. Если у тебя есть int'овая переменная "a", то "cin >> a" отрабатывает таким образом, что сначала где-то запоминается введённая строка (просто как набор символов), а затем запускается процедура конвертации из строки в число, настроенная таким образом, что строковая запись трактуется как 10-ичная запись числа. А "cin >> hex >> a" отработает точно так же, только конверnилка настроена на 16-ричную запись

Цитата Сообщение от Chelioss Посмотреть сообщение
Ввожу символ t, код которого 116. В результате должно записаться число 278
Ничего не понял. Приведи конкретный код программы с конкретными описаниями типов, а не так, что сначала написал некий код, потом что-то на словах сказал и что-то в уме подразумевал
1
 Аватар для pito211
187 / 174 / 18
Регистрация: 22.03.2010
Сообщений: 612
04.06.2011, 18:32
ios_base& hex ( ios_base& str );

Use hexadecimal base
Sets the basefield format flag for the str stream to hex.

When basefield is set to hex, integral numerical values inserted into the stream are expressed in the hexadecimal base (radix 16). For input streams, extracted values are also expected to be expressed in the hexadecimal base when this flag is set.
понятно?
1
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
04.06.2011, 18:47  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Ничего не понял.
C++
1
2
unsigned char str[LEN];
cin >> hex >> str; // t
Цитата Сообщение от pito211 Посмотреть сообщение
понятно?
С английским не дружу. numerical values - численные значения(google переводчик). А ведь char:
char - это обычный целочисленный тип: такой же по природе, как int, но другого размера.
0
 Аватар для pito211
187 / 174 / 18
Регистрация: 22.03.2010
Сообщений: 612
04.06.2011, 18:59
http://ru.wikipedia.org/wiki/Символьный_тип
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
04.06.2011, 19:03
С точки зрения компилятора и хранения данных char - это действительно такой же int, но более короткий. Но при этом массив char'ов как правило трактуется как строка. При этом надо понимать, что строка - это всего лишь массив целых чисел, но числа при этом кодируют не свои значения, а некоторые символы. Это становится критичным только в случае ввода-вывода. Т.е. при печати char'а может возникнуть двоякая ситуация: распечатать его как число или распечатать как символ (который закодирован в виде числа).

В Си'шном printf'е с этим вопросом всё более-менее ясно. При печати любого переданного значения мы явно указываем, каким образом трактовать это значение (%d - как целое число, %c - как символ):

C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main (void)
{
  char c;
 
  c = 70;
  printf ("%d\n", c);
  printf ("%c\n", c);
  return 0;
}
будет напечатано

Code
1
2
70
F
Потому что значение 70, рассмотренное (трактованное) как кодировка символа, является буквой F. Это НЕ свойство языка программирования и НЕ свойство процессора. Это некое человеческое соглашение

В Си++ с этим делом несколько иначе сделано. У тебя есть перегруженный оператор << который привязан к типу, но при этом нет возможности указать, а каким же образом трактовать переданное значение. Разработчики сделали так, что для char'а оператор << будет печатать его как символ (т.е. трактовать char как кодировку). При вводе всё тоже самое, только у тебя символьное представление превращается в числовое. Если char в данном случае трактовать как целое число, то введённое значение "0" должно превратиться в однобайтовое число со значением 0. Если же трактовать как символ, то "0" должен превратиться в однобайтовое число, кодирующее символ "0" - это число 48. Оператор >> и cin работают симметрично cout'у и оператору << и трактуют char как символ (т.е. cin >> в отношении char'а работает не так, как в отношении прочих целых типов)

Ну и дополнительно массив char'ов трактуется cin'ом и cout'ом как строка символов. Как в таком случае должен работать hex - хз, ибо hex следует применять при работе с числами, а не символами

Добавлено через 1 минуту
Очередная идиотская статья, написанная "для галочки" ("чтобы было"), из которой начинающий ничерта не сможет понять
1
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
05.06.2011, 09:50
Цитата Сообщение от Chelioss Посмотреть сообщение
unsigned char str[LEN];
Это не символ, а строка символов. На строки числовые манипуляторы не распространяются.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.06.2011, 09:50
Помогаю со студенческими работами здесь

Из bin в dec и из oct в dec
нужно создать что-то типо программного конвертера, есть edit, там вводится число, например двоичное, нажимаю button, оно конвертируется в...

Функция для перевода цел.числа из dec в oct
Написал функцию для перевода, вроде бы переводит, а результат не смог вывести. Укажите на ошибки. Потому что чую, что где-то накосячил...

[BMP] HEX (из HEX-редактора) в DEC
Имеется файл *.bmp (который нельзя вложить в сообщение). В самом файле есть его свойства (размер и т.д.). Как их перевести из HEX в DEC? ...

Преобразование oct => hex
Как преобразовать восьмеричное число в шестнадцатиричное на ассемблере? Т.е есть переменная вида: var dw 123q (восьмеричное),...

Конвертация в Hex Oct Bin из десятичной
Подскажите как реализовать конверсию чисел в Visual C++ из десятичной в Hex Oct Bin c помощью функции itoa или может как то можно...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru