C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как преобразовать каждые 2 байта в AnsiString в 16, Как преобразовать каждые 2 байта в AnsiS
serg128
Отправлено: 08.04.2005, 17:55


Дежурный стрелочник

Группа: Участник
Сообщений: 46



Т.е. имеем строку AnsiString вида "df673rty", а мне её надо отобразить как "ff 16 25, e1". Делаю
AnsiString dest;
for(int i=1; i<=s.Length(); i++)
{
dest.sprintf("%02X", s);
v.push_back(dest);
}
но вылазит какой-то бред! Помогите плиз, в чём дело?
vvoid
Отправлено: 08.04.2005, 18:14


Машинист паровоза

Группа: Участник
Сообщений: 171



Напиши, плз, поподробнее в чём проблема, а то я чего-то не могу врубить каким образом ты из "df673rty" получаешь "ff 16 25, e1". Думаю, что красная запятая является лишней.
** serg128
Отправлено: 09.04.2005, 11:58


Не зарегистрирован







Вот пример кода, кому не в лом, проверьте плиз:


vector v;
AnsiString s = "??\nuuuu(";
AnsiString dest;
for(int i=1; i<=s.Length(); i++)
{
dest.sprintf("%02X", s);
v.push_back(dest);
}

for(int i=0; i Memo1->Lines->Add(v);

v.clear();

Выведет такое:
FFFFFFFF
FFFFFFFD
0A
75
75
75
75
28

Так вот в выводе смущают FFFFFFFF и FFFFFFFD, должно быть FF и FD.

Это я с модемом по СОМ-порту так работаю.
Rius
Отправлено: 09.04.2005, 13:53


Мастер участка

Группа: Участник
Сообщений: 321



ты скажи, что тебе надо вывести и как?

глюк с FFFFFFFD у меня был с функцией IntToHex

Отредактировано Rius — 09/04/2005, 16:56
serg128
  Отправлено: 09.04.2005, 14:28


Дежурный стрелочник

Группа: Участник
Сообщений: 46



мля, уже не знаю как и объяснить...

Ну в общем надо преобразовать каждый байт(символ) строки в Hex. IntToHex тут не прокатит — в строке есть не только числа...
Rius
Отправлено: 09.04.2005, 14:39


Мастер участка

Группа: Участник
Сообщений: 321



Так сойдет?
CODE
AnsiString source = "abcdefg jhgusdhhfd5345";
AnsiString dest;
for(int i=0; i<source.Length(); i++)
{
   unsigned char s = source.c_str()[i];
   dest += IntToHex(s,2) + " ";
}
Caption = dest;

Подредактируй под свою задачу.
Каждый один символ в AnsiString представлен одним байтом (в WideString — 2)
serg128
Отправлено: 09.04.2005, 15:51


Дежурный стрелочник

Группа: Участник
Сообщений: 46



Пасиба, кажись работает, вот только с WideString-2 не сильно то и понятно, ну эт наверно после пива.... smile.gif
Konstantine
Отправлено: 11.04.2005, 08:04


Мастер участка

Группа: Модератор
Сообщений: 545



не грузись WideString-ом и не отвлекайсь от пива smile.gif
AnsiString — он и только он... для твоей задачи ничё более не нужно smile.gif
Asher
Отправлено: 11.04.2005, 08:12


Мастер участка

Группа: Модератор
Сообщений: 550



CODE

dest.sprintf("%02.2X", s[i]);

Вернуться в Вопросы программирования в C++Builder