Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


Ответ
 
Опции темы
Старый 30.10.2010, 14:59   #1
davinci
 
Регистрация: 30.10.2010
Сообщений: 7
По умолчанию Как конвертировать массив символов в массив байт

Такая задача:
Есть масив символов (строка).
Например unsigned char textkey="00112233445566778899aabbcc ddeeff". (Ключ для шифрования, если спросите, что это и зачем).

Для дальнейшей работы надо этот масив символов сделать масивом соответствующих байт, а то есть char bytekey={0x00,0x11,0x22,...,0xee,0x ff}.

Пожалуйста, помогите это сделать наиболее простым способом...

Или, если можно вводить данные в поле Edit сразу в Hex формате, а не как текст, то подскажите, как...

Юзаю C++ Builder 2007.
davinci вне форума Ответить с цитированием
Старый 30.10.2010, 15:22   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Функция HexToInt (так, кажется) переводит строку AnsiString в число, если там была символьная запись в 16-ричном формате. Ну и еще можете пользоваться различными строковыми потоками, sscanf для чтения из строк в числа.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 30.10.2010, 15:38   #3
davinci
 
Регистрация: 30.10.2010
Сообщений: 7
По умолчанию

К сожалению, есть только IntToHex(), но ни в билдере, ни в делфи не обнаружил HexToInt().
Собственно, StrToInt() переводит шестнадцатиричную запись в число...

Прийдётся придумывать функцию, так как у меня массив сплошной, без "0х..."
Я просто надеялся, что есть что-то уже готовое.
Ладно, спасибо за внимание.
davinci вне форума Ответить с цитированием
Старый 30.10.2010, 15:44   #4
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Да и в ручную это не очень трудно:
Код:
#include <string.h>

void uch_to_hex(unsigned char Ch, char *szRes)
{
	char res[] = "0x00";
	if(Ch / 16 < 10)
		res[2] = Ch / 16 + '0';
	else
		res[2] = Ch / 16 + 'A' - 10;
	if(Ch % 16 < 10)
		res[3] = Ch % 16 + '0';
	else
		res[3] = Ch % 16 + 'A' - 10;
	strcpy(szRes, res);
}
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 30.10.2010, 16:38   #5
davinci
 
Регистрация: 30.10.2010
Сообщений: 7
По умолчанию

Кажись, не то...
Мне нужно из каждых двух симвлов строки получить один соответствующий байт.
То есть, если string str="ff", char byte=0xff, а не "0xff".
davinci вне форума Ответить с цитированием
Старый 30.10.2010, 16:52   #6
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Так это еще проще:
Код:
unsigned char str_to_hex(const char *szstr)
{
      return ((szstr[0] > '9' ? szstr[0]-'a' : szstr[0]-'0')*16 + (szstr[1] > '9' ? szstr[1]-'a' : szstr[1]-'0'));
}
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 30.10.2010, 17:09   #7
davinci
 
Регистрация: 30.10.2010
Сообщений: 7
По умолчанию

Ух ты!
Очень большое спасибо!
Действительно просто. У меня идея похожая была, но что-то позабыл о возможности сравнения символов, думал, надо все возможные варианты описывать... балда((

Еще раз спасибо!
davinci вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме от 7000 рублей в месяц



Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив в dll - как разместить массив в dll и как вызвать элемент этого массива по индексу? Кинельски Помощь студентам 0 23.05.2010 19:52
Как проверить наличие в конкретной папке DLL, а потом на вход каждой подать массив байт,и на выходе тоже. Sanches_Ramires Общие вопросы .NET 1 02.02.2009 15:02
Массив символов PsyTech Общие вопросы C/C++ 4 08.10.2007 09:13


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Скидки на курсы GeekBrains 40%, выбирайте программу для себя