Главная страница
    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.094 c
15-1157662081
Offtoper
2006-09-08 00:48
2006.10.01
Просто оффтоп


4-1148307365
sholom
2006-05-22 18:16
2006.10.01
Подключить к COM-порту или USB


2-1158064054
Juri
2006-09-12 16:27
2006.10.01
работа с Memo


4-1148639852
Shaman_
2006-05-26 14:37
2006.10.01
Перехват записи в буфер обмена


2-1158235468
alexandrine
2006-09-14 16:04
2006.10.01
DBLookupComboBox





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский