Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.019 c
2-1158145423
Gorin
2006-09-13 15:03
2006.10.01
Как сохранить изменения, сделанные SQL запросом.


8-1142237353
Alex_Delphi
2006-03-13 11:09
2006.10.01
Как сознать виртуальний CD диск


15-1157697464
Pazitron_Brain
2006-09-08 10:37
2006.10.01
Мой вопрос занимает в орешнике


15-1157818823
ArtemESC
2006-09-09 20:20
2006.10.01
Английский lib.ru посоветуйте. (С английскими текстами)


1-1156147536
webpauk
2006-08-21 12:05
2006.10.01
Диагональная заливка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский