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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2012, 20:20   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию конвертирование из unsigned char в char

Доброе время суток, есть функция возвращающая значение типа unsigned char* это значение необходимо преобразовать в char*
Помогите плиз, что только уже не попробовала...

Код:
unsigned char hash[8];
ORACLE_Hash (username, password, strlen (password), hash);
char *temp_hash;
По сути нужно чтобы в temp_hash было значение подобное DCB748A5BC5390F2

пробовала вот так:
Код:
	char *temp_hash = new char[16];
	strcpy(temp_hash,(char*)hash);
	return temp_hash;
Но возвращается -36 'Ь' 0x004e63d0
Единственное, что ограничивает полет мысли программиста-компилятор

Последний раз редактировалось Sparky; 21.05.2012 в 20:25.
Sparky вне форума Ответить с цитированием
Старый 21.05.2012, 20:41   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Позвольте уточнить, Вы хотите получить строковое представление хеша? Если так, то просто скопировать массив недостаточно, нужно сопоставить их с печатными символами из используемой кодовой страницы (например ASCII).

Простейший пример: http://ideone.com/NKMCf
netrino вне форума Ответить с цитированием
Старый 22.05.2012, 07:42   #3
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

да вы правильно поняли, но проблема в том что hash[8] а конвертировать нужно в temp_hash[16]. И все равно почему-то у меня строка не получается с этим кодом...
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 22.05.2012, 07:48   #4
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

а можно как-то просто printf вывести в переменную temp_hash?
Код:
	for(int i=0;i<8;i++)
		printf("%.2X",hash[i]);
Единственное, что ограничивает полет мысли программиста-компилятор

Последний раз редактировалось Sparky; 22.05.2012 в 07:57.
Sparky вне форума Ответить с цитированием
Старый 22.05.2012, 08:06   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если не ошибаюсь - sprintf сохраняет форматирование в переменку.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.05.2012, 08:17   #6
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

Код:
for(int i=0;i<8;i++)
		sprintf(temp_hash,"%2.X",hash[i]);
Но проблема в том что каждый раз пишет в начало, а если без цикла то значение не 16 разрядное
Единственное, что ограничивает полет мысли программиста-компилятор

Последний раз редактировалось Sparky; 22.05.2012 в 08:26.
Sparky вне форума Ответить с цитированием
Старый 22.05.2012, 08:33   #7
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

Код:
char* generate_hash(char* u, char* p)	//генерация хеша(имя пользователя,пароль)
{
	char username [32]; 
	char password [32];
	unsigned char hash[8];

	strcpy (username, u);
	strcpy (password, p);
	ORACLE_Hash (username, password, strlen (password), hash);

	char temp[2];
	char temp_str[17]="";
	
	for(int i=0;i<8;i++)
	{
		sprintf(temp,"%2.X",hash[i]);
		strcat(temp_str,temp);
	}
	return temp_str;
}
Вот только теперь stack around the variable temp_str was corrupted. Как исправить?
Единственное, что ограничивает полет мысли программиста-компилятор

Последний раз редактировалось Sparky; 22.05.2012 в 08:50.
Sparky вне форума Ответить с цитированием
Старый 22.05.2012, 12:59   #8
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Sparky

stack around the variable temp_str was corrupted.

ясен пень (Ж

Как исправить?

не возвращать временную строку из функции.
варианты: new/malloc/strdup или (лучше) std::string
Rififi вне форума Ответить с цитированием
Старый 22.05.2012, 16:46   #9
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

в итоге просто добавила символ конца строки, можно закрывать
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
'unsigned char [512]' в 'const char *' frommars Visual C++ 8 02.07.2011 13:37
unsigned char в array<Byte> Artemprodigy Visual C++ 0 23.03.2011 11:19
перевод в string из unsigned char Dimarik Общие вопросы C/C++ 5 22.03.2011 22:46
Конвертирование из const char*(System::String) в LPCWSTR Eros Общие вопросы .NET 1 27.05.2010 12:36