Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
#1

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

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

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

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

И еще, коды в переменных типа char и числа в int всегда записываются в десятичной системе исчисления, т.е. что бы не вводил в итоге будет число в десятичной системе исчисления?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2011, 16:53     Влияет ли манипуляторы hex,oct,dec на массив символов?
Посмотрите здесь:

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

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

Из Hex в Dec - C++
Перевел из чара в инт и что-то не вьеду как теперь возвести . #include<iostream> #include<cmath> #include<string> using...

S dec na hex, ukazatel - C++
Pomogite pojaluista! Etot kod menyaet 10noe chislo na 16noe. Nado izmenit eto chtoby zdes byl ukazatel i funkcia to est v int main() Tolko...

Перевод числа из hex в dec - C++
Привет, можете подсказать как можно перевести 16-ричное число произвольной длины (например, заданное с помощью строки) в десятичную сс?...

Как в С++ конвертнуть HEX в DEC? - C++
Киберперцы, есть ли готовая функция в Visual C++ для конвертации из HEX (типа F4A36) в DEC (типа 1002038) ?

Hex коды символов из char* в стринг - C++
Добрый день. Голову себе сломал, гуглил. Все без толку. Есть массив символов (char*). Мне нужно получить строку std::string отображающую...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт CАвтор FAQ
17463 / 5701 / 361
Регистрация: 30.03.2009
Сообщений: 15,648
Записей в блоге: 26
04.06.2011, 17:37     Влияет ли манипуляторы hex,oct,dec на массив символов? #2
Вот здесь Неочевидные ответы на простые вопросы почитай раздел 8, может ясности в вопросе прибавится
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
04.06.2011, 18:18  [ТС]     Влияет ли манипуляторы hex,oct,dec на массив символов? #3
Со вторым вопросом понятно, но не с первым.

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

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

Цитата Сообщение от Chelioss Посмотреть сообщение
Ввожу символ t, код которого 116. В результате должно записаться число 278
Ничего не понял. Приведи конкретный код программы с конкретными описаниями типов, а не так, что сначала написал некий код, потом что-то на словах сказал и что-то в уме подразумевал
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
04.06.2011, 18:32     Влияет ли манипуляторы hex,oct,dec на массив символов? #5
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.
понятно?
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
04.06.2011, 18:47  [ТС]     Влияет ли манипуляторы hex,oct,dec на массив символов? #6
Цитата Сообщение от Evg Посмотреть сообщение
Ничего не понял.
C++
1
2
unsigned char str[LEN];
cin >> hex >> str; // t
Цитата Сообщение от pito211 Посмотреть сообщение
понятно?
С английским не дружу. numerical values - численные значения(google переводчик). А ведь char:
char - это обычный целочисленный тип: такой же по природе, как int, но другого размера.
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
04.06.2011, 18:59     Влияет ли манипуляторы hex,oct,dec на массив символов? #7
http://ru.wikipedia.org/wiki/Символьный_тип
Evg
Эксперт CАвтор FAQ
17463 / 5701 / 361
Регистрация: 30.03.2009
Сообщений: 15,648
Записей в блоге: 26
04.06.2011, 19:03     Влияет ли манипуляторы hex,oct,dec на массив символов? #8
С точки зрения компилятора и хранения данных 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;
}
будет напечатано

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

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

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

Добавлено через 1 минуту
Очередная идиотская статья, написанная "для галочки" ("чтобы было"), из которой начинающий ничерта не сможет понять
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2011, 09:50     Влияет ли манипуляторы hex,oct,dec на массив символов?
Еще ссылки по теме:

Вывести в окно программы hex массив byte - C++
Вот есть массив: byte AESKey; Он уже заполнен, как мне вывести в консоль в 16м виде весь этот массив? Видел где - то, но вспомнить...

Манипуляторы в С++ - C++
___________________Манипуляторы______________________ - endl_________________перевод строки - flush________________выгружает содержимое...

манипуляторы - C++
Создайте свои манипуляторы которые будут выполнять 1)вывод всех символов равных заданному заменить пробелом 2)вывод всех символов...

манипуляторы - C++
Создайте манипулятор ввода skipcbar(), который, поочередно, то считывает, то пропускает каждые десять символов потока ввода.

Манипуляторы - C++
Ребята, проблема с манипуляторами.. Вместо того чтобы были пустые места, программа выдает нули(( void view(HANDLE hrFile) { ...


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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
05.06.2011, 09:50     Влияет ли манипуляторы hex,oct,dec на массив символов? #9
Цитата Сообщение от Chelioss Посмотреть сообщение
unsigned char str[LEN];
Это не символ, а строка символов. На строки числовые манипуляторы не распространяются.
Yandex
Объявления
05.06.2011, 09:50     Влияет ли манипуляторы hex,oct,dec на массив символов?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru