Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

скопировать строку в массив [D7]


абабаба ©   (2006-09-14 10:40:00) 

Необходимо скопировать строку, примерно такого содержания: "1234567890ff", в массив, по 2 символа из строки.

т.е.

p = array of byte;
s = "1234567890ff";

что бы в итоге, в массиве было следующее: ($12, $34, $56, $78, $90, $ff);


begin...end   (2006-09-14 11:16:00) [1]

> абабаба   (14.09.06 11:10) [12]

> а что изменить в HexToBin?

PChar(p) заменить на PChar( @p). Элементы массива, следующие после элемента с индексом 5, при необходимости обнулить самостоятельно.


абабаба   (2006-09-14 11:15:00) [2]


> zamtmn


Просто строковые константы куда более интенсивнее используются в совершенно другом месте.


zamtmn   (2006-09-14 11:12:00) [3]

>>у меня на деле является константой
нафига нужны промежуточные константы, тогда уж сразу
const p : array [0..5] of byte=($12, $34, $56, $78, $90, $ff);


абабаба   (2006-09-14 11:10:00) [4]

SetLength(p, Length(s) div 2);
HexToBin(PChar(s), PChar(p), Length(p));

а как быть в том случае, если размерность массива задана заранее? p = array [0..32] of Byte;
Ну я понимаю убрать SetLength, а что изменить в HexToBin?


Dmitrij_K   (2006-09-14 11:06:00) [5]


> SetLength(p, Length(s) div 2);HexToBin(PChar(s), PChar(p),
>  Length(p));

а мы мучаемся Ж)


begin...end   (2006-09-14 11:03:00) [6]

SetLength(p, Length(s) div 2);
HexToBin(PChar(s), PChar(p), Length(p));


Dmitrij_K   (2006-09-14 11:02:00) [7]

var j:Integer;
j:=1;
while j<=length(Str) do
 copy(str,j,2);
 j := j + 2;


абабаба   (2006-09-14 11:00:00) [8]

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

Мало у меня знаний. Лично я пытался в цикле проверять четность i и затем... ничего не вышло.


Dmitrij_K   (2006-09-14 10:53:00) [9]


> такие вещи лучше вынести из цикла, будет гораздо быстрее

Полностью согласен.


SergP.   (2006-09-14 10:52:00) [10]

> абабаба   (14.09.06 10:40)
> Необходимо скопировать строку, примерно такого содержания:
> "1234567890ff", в массив, по 2 символа из строки.
>
> т.е.
>
> p = array of byte;
> s = "1234567890ff";
>
> что бы в итоге, в массиве было следующее: ($12, $34, $56,
> $78, $90, $ff);


Это не скопировать, это тебе нужно разбить строку по 2 символа, преобразовать каждую такую пару из символьного представления в byte, а потом занести в нужный массив.


Рамиль   (2006-09-14 10:51:00) [11]


>  l := length(p);
>  setlength(p,l+1);

Не надо так.
До цикла SetLength(p, Length(str) div 2 {+1 если может быть нечетное кол. символов)})


zamtmn   (2006-09-14 10:50:00) [12]

delete(str,1,2);
setlength(p,l+1);
такие вещи лучше вынести из цикла, будет гораздо быстрее


Dmitrij_K   (2006-09-14 10:46:00) [13]

Str := "1234567890ff;
while str<>'' do
begin
 Byte := StrToInt('$'+copy(str,1,2))
 delete(str,1,2);
 l := length(p);
 setlength(p,l+1);
 p[l] := Byte;
end


Dmitrij_K   (2006-09-14 10:43:00) [14]

И что у тебя не получается?


Рамиль   (2006-09-14 10:42:00) [15]

Один символ - один байт.


Наверх

Титульная страница Поиск, карта сайта Написать письмо