Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.01;
Скачать: CL | DM;

Вниз

скопировать строку в массив   Найти похожие ветки 

 
абабаба   (2006-09-14 10:40) [0]

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

т.е.

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

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


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

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


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

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


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

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


 
zamtmn ©   (2006-09-14 10:50) [4]

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


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


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

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


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

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


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


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


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

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


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

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

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


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

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


 
begin...end ©   (2006-09-14 11:03) [10]

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


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


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

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


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

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

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


 
zamtmn ©   (2006-09-14 11:12) [13]

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


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


> zamtmn


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


 
begin...end ©   (2006-09-14 11:16) [15]

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2006.10.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
15-1157632666
george_soselia
2006-09-07 16:37
2006.10.01
карты


2-1157830754
Димон
2006-09-09 23:39
2006.10.01
Объявление типов


1-1156328225
Term
2006-08-23 14:17
2006.10.01
Можно программно определить тип переменой


15-1157838035
Ketmar
2006-09-10 01:40
2006.10.01
google.com


2-1157981853
Jager
2006-09-11 17:37
2006.10.01
Как работать к LPT портом?