Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2012, 23:27   #1
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию Перевод строки в hex?

А как можно перевести строку в hex ?
С цифрами все "ок"
Код:
#include <iostream>

int main () 
{
	int i(01222012);
	std::cout << std::hex << i << std::endl;

	system("pause");
}
Вот такой код работает с 1 символом, но не с строкой.

Код:
#include <iostream>

int main()
{
          char str = 'A';
          std::cout << std::hex << static_cast<int>(str) << std::endl; 

          system("pause");
}
А вот как быть с строкой?

Пробовал так, но сие тоже не работает.
Код:
char i[] = "Hello!";
printf(i, std::hex);
Просто интересно, как строку в hex и hex в строку обернуть.
Буду рад любой помощи )
L6go1as вне форума Ответить с цитированием
Старый 22.01.2012, 23:43   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
	char s[]="hello world";
	std::cout << std::hex;
	for(int i=0;s[i];i++) std::cout<< (short int)s[i]<<' '; 
	std::cout<< std::endl;
	std::cin.get();
Пойдеть?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.01.2012, 23:48   #3
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Более чем, но что есть (short int) перед s[i]?
Ибо без этого магического (short int) не работает так, как надо.

Не совсем понял как все работает. Не могли бы прокомментировать, как работает прога?
L6go1as вне форума Ответить с цитированием
Старый 22.01.2012, 23:50   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

это приведение типов в стиле С.
говорим что надо привести выражение к типу short int, такие типы не являются символьными, а числовыми, потому и работает.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.01.2012, 23:59   #5
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Ааа, ну так и подумал. Правда зачем в этом случае (short int) - лично я не понял, тогда уж (int) - более чем достаточно. Или дело в кол-во байтах и только?

В любом случае, раз первый вопрос перевода из строки в hex решена.
Как насчет обратки?

Будет ли сл. код актуальным?

Код:
int s[]= {48, 65, 6c, 6c, 6f, 20, 77, 6f, 72, 6c, 64};

	std::cout << std::dec;
	for(int i=0; s[i]; i++) 
		std::cout << (char) s[i] <<' '; 

	std::cout<< std::endl;

	system("pause");
L6go1as вне форума Ответить с цитированием
Старый 23.01.2012, 09:19   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Или дело в кол-во байтах и только?
В них.
Цитата:
Будет ли сл. код актуальным?
Что мешает проверить?
Однако я бы написал: short int s[]
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.01.2012, 17:46   #7
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Чутка посидел, вот что получилось.

Код:
#include <iostream>

int main()
{
	char str[] = {0};
	std::cin.getline(&str[0], 256);

	for(int i = 0; str[i]; i++)
		printf("%x ", str[i]);

	std::cout << std::endl;
    system("pause");
}
Но вот в чем прикол, после завершения работы программы, вылетает ошибка:

Цитата:
Run-Time Check Failure #2 - Stack around the variable 'str' was corrupted.
Релиз версия выдает вот что:

Цитата:
Unhandled exception at 0x76ef15ee in Number_fin.exe: 0xC0000005: Access violation.
Не могли бы разъяснить, в чем проблема и как ее решить?

Хм. Изменил:
Код:
har str[256] = {0};
	std::cin.getline(str, 256);
Заработало, все ок.

Но вопрос все же остается, так как по сути после getline заполняется str. До getline массив не определен - с этим ок, но ведь после то, он уже должен быть определен, так как строка то уже введена. Или я чего-то путаю?

Последний раз редактировалось L6go1as; 23.01.2012 в 17:53.
L6go1as вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод строки в HEX в DEC FarStar Visual C++ 13 07.06.2011 14:16
Перевод из dec в hex McDoC Помощь студентам 10 30.06.2010 09:03
Перевод в HEX посредством javascript WennY JavaScript, Ajax 5 04.07.2009 23:32
Перевод BIN -> HEX Piar Помощь студентам 2 20.05.2009 15:44
Перевод из HEX в АСМ PaperPlane Софт 12 30.04.2009 03:05