Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / AnsiString и unsigned char* / 25 сообщений из 29, страница 1 из 2
13.09.2006, 17:08
    #33984987
Туго идет
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
Ситуация такая. В Edit записывается фамилия (не превышает 16 символов). Необходимо фамилию запихнуть в unsigned char* Data [16], если в фамилии меньше 16 символов, то оставшиеся "ячейки" Data добить 0x00.
Написал так, но это не верно.....
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
                edtData->Text = “Петров”;
                unsigned char* Data;
                Data = new char[ 16 ];
                AnsiString DataString = edtData->Text;
                unsigned char* ch;
                for (int SymbolCount =  0 ; SymbolCount <  16 ; SymbolCount++)
                {
                        if (SymbolCount <= DataString.Length())
                        {
                                ch = DataString.SubString(SymbolCount,SymbolCount +  1 ).c_str();
                                Data[SymbolCount] = *ch;
                        }
                        else
                                Data[SymbolCount] = 0x00;
                }


...
Рейтинг: 0 / 0
13.09.2006, 17:13
    #33985011
Туго идет
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
Или ещё такая ситуация:
На форме 6 Edit. В них записывается шестизначное число, допустим E7,AA,FF,F0,AF,ED. Требеуется их записать в Data

Код: plaintext
1.
unsigned char* Data;
Data = new char[ 6 ];

Типа:

unsigned char* Data;
Data = new char[6];

Код: plaintext
1.
2.
3.
4.
5.
Data[ 0 ] = 0x E7;
Data[ 1 ] = 0xAA;
Data[ 2 ] = 0xFF;
Data[ 3 ] = 0xF0;
Data[ 4 ] = 0xAF;
Data[ 5 ] = 0xED; 

Только значения из Edit->Text
...
Рейтинг: 0 / 0
13.09.2006, 17:16
    #33985026
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
я так понимаю (не первый топ)
что у явные проблемы с ансистрингом.
тогда нах он нужен.

не могу судить об остальном: нет описания,

Код: plaintext
 ch = DataString.SubString(SymbolCount,SymbolCount +  1 ).c_str();

но такое получение 1 символа не есть хорошо даже.

Код: plaintext
1.
2.
3.
4.
5.
6.
ch = DataString.c_str(); - я так понимаю этио получение указателя строки
strcpy( Data, ch );
for (int SymbolCount = DataString.Length(); SymbolCount <  16 ; SymbolCount++)
{
  Data[SymbolCount] =  0 ;
}
...
Рейтинг: 0 / 0
13.09.2006, 17:52
    #33985160
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
AnsiString sa="xdvkdfnldf";
char *sc=new char[ 16 ];
int L=sa.Length();
if (L< 16 )
{
    ZeroMemory(sc, 16 );
    strcpy(sc,sa.c_str());
}
else
{
    memcpy(sc,sa.c_str(), 16 );
}

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
13.09.2006, 17:55
    #33985169
Туго идет
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
Спасибо, с первой частью я не без вашей помощи разобрался, вот теперь над второй мучаюсь.
...
Рейтинг: 0 / 0
13.09.2006, 19:32
    #33985392
Туго идет
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
В СИ недавно.
Требовалось шестнадцатиричное число вида XX (например "AF"), записанное в шести Edit->Text "перенести" в unsigned char* Data = new char[6] .
Ну и наворотил я, хоть и работает )))))
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
unsigned char* Data = new char[ 6 ];;
int FirstSymbol,SecondSymbol;
AnsiString Symbol1,Symbol2;
AnsiString HEX[ 16 ]={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
TEdit *edtEdit;
for (int Key =  0 ; Key <  6 ; Key++)
{
        edtEdit = dynamic_cast<TEdit*>(frmMain->FindComponent("Edit" + IntToHex(Key+ 1 ,  1 )));
        Symbol1 =edtEdit->Text.SubString( 1 , 1 );
        Symbol2 =edtEdit->Text.SubString( 2 , 2 );
        for(int d= 0 ;d< 16 ;d++)
        {
                if (HEX[d]==Symbol1)    FirstSymbol = d;
                if (HEX[d]==Symbol2)    SecondSymbol = d;
        }
        Data[Key] = char(FirstSymbol* 16 +SecondSymbol);
}

подскажите как упростить
...
Рейтинг: 0 / 0
13.09.2006, 19:39
    #33985401
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
Aklinя так понимаю (не первый топ)
что у явные проблемы с ансистрингом.
тогда нах он нужен.ооп, ёптыть. Вот топик-близнец: http://sql.ru/forum/actualthread.aspx?tid=337303
...
Рейтинг: 0 / 0
13.09.2006, 20:38
    #33985478
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
всегда делай так. вот только 16 символов может не хватить для всех

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
String aa = "Череззабоногузадирищенко";
char szStroka[ 16 ] = { 0 }; // маленький размер
char szLastName[ 255 ] = { 0 }; // праивльный размер

strncpy( szStroka, aa.c_str(), sizeof(szStroka)- 1  ); // урежет правильно
strncpy( szLastName, aa.c_str(), sizeof(szLastName)- 1  ); // справа будут нули


и ничего добивать не придется
...
Рейтинг: 0 / 0
14.09.2006, 15:00
    #33987506
вопрозь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
Не знаю, как точно задать вопрос, но попробую. Как сделать, чтобы указатель не ссылался на на какую область памяти?

Код: plaintext
unsigned char* charbuf = new char[ 48 ];
...
Рейтинг: 0 / 0
14.09.2006, 15:07
    #33987544
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
charbuf = NULL;
...
Рейтинг: 0 / 0
14.09.2006, 15:09
    #33987559
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
полсе этого charbuf на будет ссылаться на какую область памяти.
...
Рейтинг: 0 / 0
14.09.2006, 15:15
    #33987591
вопрозь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
maXmoполсе этого charbuf на будет ссылаться на какую область памяти.
Значит я что-то недопонял. У меня на этом месте вылетает ошибка. Моя ситуация:
объявляю
Код: plaintext
1.
unsigned char* charbuf = new char[ 48 ];
Далее у меня цикл в три оборота, в цикле я делаю
Код: plaintext
charbuf = Null
А потом в новом цикле я делаю присвоение каждуму элементу массива charbuf.
...
Рейтинг: 0 / 0
14.09.2006, 15:16
    #33987597
вопрозь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
в предыдущем вопросе опечатался
Код: plaintext
charbuf = NULL
...
Рейтинг: 0 / 0
14.09.2006, 15:42
    #33987732
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
вопрозь
Далее у меня цикл в три оборота, в цикле я делаю
Код: plaintext
charbuf = Null
А потом в новом цикле я делаю присвоение каждуму элементу массива charbuf.

Сначала ты теряешь ссылку на массив, а потом по ней пытаешься в него что-то записать
...
Рейтинг: 0 / 0
14.09.2006, 15:49
    #33987774
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
вопрозьв предыдущем вопросе опечатался
Код: plaintext
charbuf = NULL


если даже борланд из этого сделает
Код: plaintext
*charbuf = NULL
или
Код: plaintext
charbuf[ 0 ] = NULL
что и там и там есть первый указатель массива, то могу сказать, что плохо вы понимаете char* (наверное ансистринг за вас все до этого делал) а зря.
char* -самый быстрый способ обработки строк.
...
Рейтинг: 0 / 0
14.09.2006, 15:56
    #33987806
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
вопрозьДалее у меня цикл в три оборота, в цикле я делаю
Код: plaintext
charbuf = Null
А потом в новом цикле я делаю присвоение каждуму элементу массива charbuf.героин - зло.
...
Рейтинг: 0 / 0
14.09.2006, 15:58
    #33987823
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
вопрозьНе знаю, как точно задать вопрос, но попробую. Как сделать, чтобы указатель не ссылался на на какую область памяти?возможно, вопрос звучал так: как проинициализировать массив нулями?
...
Рейтинг: 0 / 0
14.09.2006, 16:01
    #33987838
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
maXmoвозможно, вопрос звучал так: как проинициализировать массив нулями?что-то я не припомню, но не инициализируется ли массив нулями компилятором ?
ну т.е. пишем char massiv[100]={0}; и вуаля - нули везде ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
14.09.2006, 16:04
    #33987855
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
Карабас Барабас maXmoвозможно, вопрос звучал так: как проинициализировать массив нулями?что-то я не припомню, но не инициализируется ли массив нулями компилятором ?
ну т.е. пишем char massiv[100]={0}; и вуаля - нули везде ?
Posted via ActualForum NNTP Server 1.3
если массив статический.
а так - теряешь указатель.
...
Рейтинг: 0 / 0
14.09.2006, 16:04
    #33987859
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
дык вроде ж было new char[48];
...
Рейтинг: 0 / 0
14.09.2006, 16:05
    #33987864
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
Карабас Барабасчто-то я не припомню, но не инициализируется ли массив нулями компилятором ?
ну т.е. пишем char massiv[100]={0}; и вуаля - нули везде ?

Дык это уже не С?
...
Рейтинг: 0 / 0
14.09.2006, 16:06
    #33987869
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
Akh Карабас Барабасчто-то я не припомню, но не инициализируется ли массив нулями компилятором ?
ну т.е. пишем char massiv[100]={0}; и вуаля - нули везде ?

Дык это уже не С?
си, даже анси си, но для статики
...
Рейтинг: 0 / 0
14.09.2006, 16:06
    #33987871
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
AkhДык это уже не С?как это не С ? я другими языками не владею :)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
14.09.2006, 16:06
    #33987872
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
в ранних редакциях с++ это был malloc (то есть треш), сейчас, может, calloc (нули).
...
Рейтинг: 0 / 0
14.09.2006, 16:07
    #33987877
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AnsiString и unsigned char*
это я про new
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / AnsiString и unsigned char* / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]