Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/68: Рейтинг темы: голосов - 68, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 16.12.2009
Сообщений: 40

Преоброзование строки в байты

30.03.2011, 00:10. Показов 14249. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача заключается в следующем , поле Edit заполняется допустим такой последовательность 589792,
допустим что это ввели пароль, дальше программа должна взять данные из поля Edit и преобразовать это в массив байт 5(53) 8(56) 9(57) 7(55) 9(57) и тд короче преобразовать каждое число в строке в его ANSII код и записать в массив для дальнейшего выполнения криптографических функций .
Чета не как не пойму как это сделать
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.03.2011, 00:10
Ответы с готовыми решениями:

Строки в байты
Есть байтовый код: "Ы°СДЫЭНC" читая его через local file = io.open(getWorkingDirectory().."/Refueling 2 - Plant.path",...

Строки и байты
Есть некая программа Значения в строке(STR) HEX КОДЫ (ПРИМЕР 06 41 6F) 1 Вопрос, как преобразовать строки в байт. 2 Вопрос, как...

Написать программу, которая бы считывала из входного файла байты с N1 по N2 и с N3 по N4 и записывала эти байты в выходной файл
Здравствуйте!В убунту на Си нужно написать программу, которая бы считывала из входного файла байты с N1 по N2 и с N3 по N4 и записывала эти...

17
7 / 7 / 0
Регистрация: 06.08.2010
Сообщений: 12
30.03.2011, 01:15
Преобразуешь число в строку и потеешь дальше.
(Если я правильно перевел вопрос с русского)
0
0 / 0 / 0
Регистрация: 16.12.2009
Сообщений: 40
30.03.2011, 01:20  [ТС]
Не понял, мне нужно нужно наоборот строку преобразовать в последовательность байт (ANSII) кодировки строки
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.03.2011, 03:24
Есть масив символов (строка).
Например unsigned char textkey="00112233445566778899aabbcc ddeeff". (Ключ для шифрования, если спросите, что это и зачем).

Для дальнейшей работы надо этот масив символов сделать масивом соответствующих байт, а то есть char bytekey={0x00,0x11,0x22,...,0xee,0x ff}.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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);
}
из каждых двух симвлов строки получить один соответствующий байт.
То есть, если string str="ff", char byte=0xff, а не "0xff".
C++
1
2
3
4
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'));
}
код не мой, не проверял
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
30.03.2011, 05:27
Как всегда, ассемблер рулит )))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString asIn = Edit1->Text;
    int iOut;
        _asm {
        push eax
        push ebx
        mov eax,&asIn
        mov ebx,[eax]
        and ebx,0xFF
        mov iOut,ebx
        pop ebx
        pop eax }
    Edit2->Text=iOut;
}
Здесь перевод по одному символу, дальше не сложно.
1
0 / 0 / 0
Регистрация: 16.12.2009
Сообщений: 40
30.03.2011, 10:43  [ТС]
Цитата Сообщение от +1 Посмотреть сообщение
Как всегда, ассемблер рулит )))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString asIn = Edit1->Text;
    int iOut;
        _asm {
        push eax
        push ebx
        mov eax,&asIn
        mov ebx,[eax]
        and ebx,0xFF
        mov iOut,ebx
        pop ebx
        pop eax }
    Edit2->Text=iOut;
}
Здесь перевод по одному символу, дальше не сложно.
Да,действительно рулит, но только первый символ в строке, а как преобразовать всю строку, я так понимаю нужно определить её длину и в цикле все конвертировать, но я в асме не селен , может подскажите как?
Я думал что есть функция для таких задач, оказывается все сложней,нужно городить свою функцию, неужели это такая редкая задача.

Добавлено через 10 минут
Ещё одна непонятка, допустим в поле Edit ввели имя, мне его нужно сохранить , но так как в С++ нет переменной типа String как в Delphi , то имя введенной в поле Edit, мне нужно сохранить в массив типа Char, как это сделать? Чето после Delphi я туго понимаю как работать со строками в С++Builder
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
30.03.2011, 11:08
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString asTemp, asIn = Edit1->Text;
    int iTemp, iOut[5];
 
    Memo1->Lines->Add(" ");
    for (int i=0; i<asIn.Length();i++)
        {
        asTemp=asIn.SubString(i+1,1);
        _asm {
        push eax
        push ebx
        mov eax,&asTemp
        mov bx,[eax]
        and ebx,0xFF
        mov iTemp,ebx
        pop ebx
        pop eax }
        iOut[i]=iTemp;
        Memo1->Lines->Add(IntToStr(iTemp));
        }
}
Типа так.
В С++ строка сохраняется в переменную типа AnsiString.
AnsiString asIn = Edit1->Text;
1
0 / 0 / 0
Регистрация: 16.12.2009
Сообщений: 40
30.03.2011, 12:05  [ТС]
+1 спасибо вам. Все работает как надо.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
30.03.2011, 13:06
Чё-то замудрили с ассемблером. Всё гораздо проще:
Можно перевести текст из Edit в char[]. В каждом индексе этого массива будет храниться ASCII код символа, но чтобы его вывести на экран, нужно в int перевести.
C++
1
2
3
4
5
6
7
8
        char text[100];
        strcpy(text, Edit1->Text.c_str() );
        int len = strlen(text);
 
        for (int i=0; i<len; i++)
        {
                Memo1->Lines->Add( (int)*(text+i) );
        }
0
0 / 0 / 0
Регистрация: 16.12.2009
Сообщений: 40
30.03.2011, 17:47  [ТС]
Ваш вариант выводит кракозябры
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
30.03.2011, 19:32
Цитата Сообщение от Zemlyanov Посмотреть сообщение
Задача заключается в следующем , поле Edit заполняется допустим такой последовательность 589792,
допустим что это ввели пароль, дальше программа должна взять данные из поля Edit и преобразовать это в массив байт 5(53) 8(56) 9(57) 7(55) 9(57) и тд короче преобразовать каждое число в строке в его ANSII код и записать в массив
Для примера:
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String s;
 
for(int i=1;i<Edit1->Text.Length()+1;i++)
{
s=s+String( int(Edit1->Text[i]));
}
ShowMessage(s);
}
//---------------------------------------------------------------------------
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
30.03.2011, 20:08
Цитата Сообщение от Zemlyanov Посмотреть сообщение
дальше программа должна взять данные из поля Edit и преобразовать это в массив байт
Может я что-то не так понимаю, но строка вроде бы и так есть массив байтов

И покажи результат выдачи с использованием ассемблерной вставки, который тебя устроил. Чтобы хоть понимать, чего конкретно ты хочешь

Добавлено через 2 минуты
Тот, кто придумал ассемблерную вставку ради того, чтобы наложить маску 0xff, жжёт просто неимоверно. Удивляюсь, как при этом обошёлся без использования OpenGL или без требования программы вставить дискету
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
30.03.2011, 20:39
Zemlyanov
Не может быть такого. Проверял, перед тем как код вставлял.
Если стоит rad studio xe, то можно так попробовать:
C++
1
2
3
4
5
6
7
8
char text[100];
strcpy(text, AnsiString(Edit1->Text).c_str() );
int len = strlen(text);
 
for (int i=0; i<len; i++)
{
    Memo1->Lines->Add( (int)text[i] );
}
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.03.2011, 22:21
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Zemlyanov
Не может быть такого. Проверял, перед тем как код вставлял.
Если стоит rad studio xe, то можно так попробовать:
C++
1
2
3
4
5
6
7
8
char text[100];
strcpy(text, AnsiString(Edit1->Text).c_str() );
int len = strlen(text);
 
for (int i=0; i<len; i++)
{
    Memo1->Lines->Add( (int)text[i] );
}
если RAD XE, то, вероятнее всего wchar_t и wcscpy, wcslen, не путайте народ.
0
 Аватар для MrAndrey_ka
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
31.03.2011, 00:21
для изобретателей велосипеда

C++
1
2
3
4
for (int i=0; i<Edit1->Text.Length(); i++)
        {
                Memo1->Lines->Add(IntToStr(((int)(Edit1->Text[i+1]))));
        }
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
31.03.2011, 01:02
Цитата Сообщение от MrAndrey_ka Посмотреть сообщение
для изобретателей велосипеда
C++
1
2
3
4
for (int i=0; i<Edit1->Text.Length(); i++)
  {
    Memo1->Lines->Add(IntToStr(((int)(Edit1->Text[i+1]))));
}
данное решение предложил уважаемый NiTan, стоило более внимательно просмотреть тему.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
31.03.2011, 04:35
не забыли, что при каждом проходе в цикле будет вызываться метод Length()?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
31.03.2011, 04:41
детали реализации...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.03.2011, 04:41
Помогаю со студенческими работами здесь

Разные байты у одной строки
Всем привет. Есть следующий извращенный алгоритм. Требуется, строку перевести в biginteger и преобразовать в массив байтов ...

Отличить числовые байты от строки utf-8
Здравствуйте! Подскажет, как в шарпе отличить числовые байты от строки utf-8? Вообщем, у меня есть сокет, в который приходит массив...

Преобразование строки в байты: оптимизировать алгоритм
Часть программы .... которая строку(довольно большую) содержащую 0 и 1 преобразует в байты( читает по 8 символов получаем байт удаляем...

Декодировать байты (в base64) в просто байты
Добрый день, нужно декодировать байты, которые зашифрованы в base64 в нормальные баты вот код : internal sbyte mSecret; ...

Конвертирование строки в байты через getBytes(encoding), странные результаты
public static void main(String args) throws UnsupportedEncodingException { String s0=&quot;H\u00ebllo&quot;; String s1=&quot;Hëllo&quot;; ...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru