Форум: "Начинающим";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
Внизскопировать строку в массив Найти похожие ветки
← →
абабаба (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c