![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
скопировать строку в массив [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]Один символ - один байт.