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

Вниз

array of Char + string   Найти похожие ветки 

 
maxwam   (2008-03-03 17:58) [0]

x1: array [0..15] of Char;
x2: string;


я хочу сделать x1 := x2, как такого лучше всего добиться?


 
Palladin ©   (2008-03-03 18:00) [1]

ты не поверишь
x2:=x1;


 
Palladin ©   (2008-03-03 18:02) [2]

о блин... гоню... наоборот же...

move(x2[1],x1,16);


 
Eraser ©   (2008-03-03 18:22) [3]


> move(x2[1],x1,16);

в свете выхода CDS2008 с поддержкой unicode так бы не стОит делать, imho )


 
DiamondShark ©   (2008-03-03 18:27) [4]

StrPLCopy(x1, x2, 15)


 
Palladin ©   (2008-03-03 18:44) [5]


> DiamondShark ©   (03.03.08 18:27) [4]

это не совсем то, что нужно, массив содержит 16 символов и не оканчивается нулем. если уж и мерятся органами, то должно быть так

l:=Length(x2);
If l>=16 Then Move(x2[1],x1,16) Else
Begin
 Move(x2[1],x1,l);
 ZeroMem(x1[l],16-l); // на всякий случай
End;


ну а с учетем модных супер нововведений, на которые сразу всем миром перейдут, рассказынных многоуважаемым Eraser ©   (03.03.08 18:22) [3], который перейдет самый первый на cds2008 :))), то думаю возможно будет организовать нечто подобное


l:=Length(x2);
If l>=32 Then Move(x2[1],x1,32) Else
Begin
 Move(x2[1],x1,l*2);
 ZeroMem(x1[l],32-l*2); // на всякий случай
End;


это конечно при условии что char вдруг станет widechar по-умолчанию, а string соответсвенно widestring... хотя там еще и utf может наблюдаться... так что мрак...


 
clickmaker ©   (2008-03-03 18:51) [6]


> [5] Palladin ©   (03.03.08 18:44)

lstrcpyn(x1, PChar(x2), Sizeof(x1)); // ANSI
lstrcpynW(x1, PWChar(x2), Sizeof(x1) shr 1); // Unicode


 
Palladin ©   (2008-03-03 19:02) [7]


> clickmaker ©   (03.03.08 18:51) [6]

LPTSTR lstrcpyn(

   LPTSTR lpString1, // address of target buffer
   LPCTSTR lpString2, // address of source string
   int iMaxLength  // number of bytes or characters to copy
  );


Parameters

lpString1

Points to a buffer into which the function copies characters. The buffer must be large enough to contain the number of bytes (ANSI version) or characters (Unicode version) specified by iMaxLength, including room for a terminating null character.  
...


я бы не стал поправлять [4]
у нас не ASCIIZ, WASCIIZ сторка, у нас массив из 16 символов


 
clickmaker ©   (2008-03-03 19:07) [8]


> у нас не ASCIIZ, WASCIIZ сторка, у нас массив из 16 символов

у нас строка, которую мы записываем в массив, который станет ASCIIZ после этого


 
Eraser ©   (2008-03-03 21:45) [9]

строки не предназначены для хранения данных.


 
korneley ©   (2008-03-03 21:50) [10]


> Eraser ©   (03.03.08 21:45) [9]
> строки не предназначены для хранения данных.

Эта... В каком смысле? Байты, призванные олицетворять символы, поражены в правах называться данными? Заинтригован...


 
DVM ©   (2008-03-03 22:23) [11]


> maxwam   (03.03.08 17:58)  

Вроде так тоже должно получиться (не проверял)

x2:=strpas(PChar(@x1));


 
Eraser ©   (2008-03-03 22:24) [12]

> В каком смысле?

в смысле не строковых данных.


 
DVM ©   (2008-03-03 22:26) [13]


> в смысле не строковых данных.

строковые от не строковых данных отличаются лишь тем что мы сами их так обзываем.


 
Eraser ©   (2008-03-03 22:47) [14]

вот это открытие.


 
DVM ©   (2008-03-03 22:49) [15]


> Eraser ©

что такое по твоему строка?


 
Eraser ©   (2008-03-03 23:01) [16]

> [15] DVM ©   (03.03.08 22:49)

это набор символов, при этом количество памяти, занимаемое каждым символом может отличаться.
для работы со строками надо использовать строковые функции.


 
korneley ©   (2008-03-03 23:12) [17]


> Eraser ©   (03.03.08 23:01) [16]
> это набор символов, при этом
> количество памяти, занимаемое каждым символом может отличаться.

А по моему строка это тип данных, характеризующийся своими правилами обработки и интерпретации результата.

> для работы со строками надо использовать строковые функции.

Тут согласен, особенно, если заменить "надо" на "рекомендуется".


 
DVM ©   (2008-03-03 23:17) [18]


> это набор символов, при этом количество памяти, занимаемое
> каждым символом может отличаться.

Все верно. Причем всегда должна быть известна длина этого набора символов. Или как то помечен конец.

Поэтому строкой вообще говоря можно считать любую область памяти с любыми произвольными данными известной нам длины. И известным началом и концом. Как трактовать этот набор байт - другой вопрос.


 
Palladin ©   (2008-03-03 23:20) [19]


>clickmaker ©   (03.03.08 19:07) [8]

массив должен содержать 16 значимых символов, а не 15 и ноль в конце именно потому, что он задекларирован так и никак иначе. и неважно что там. array [0..15] of char или array [0..3] of cardinal.


 
Eraser ©   (2008-03-03 23:42) [20]

> [17] korneley ©   (03.03.08 23:12)

все что угодно можно интерпритировать, как нетипизированный указатель на кусок памяти длиной X.
только не просто так умные люди придумали типизацию данных, imho )

> [18] DVM ©   (03.03.08 23:17)


> Как трактовать этот набор байт - другой вопрос.

именно, для того и придумали строковые функции, а самому изобретать велосипед хоть никто и не запрещает, но потом после [2] не стОит удивляться, что через пол годика, после релиза 2008, на форуме начнут появлятся соответствующие вопросы )


 
korneley ©   (2008-03-04 00:05) [21]


> Eraser ©   (03.03.08 21:45) [9]
> строки не предназначены для хранения данных.


> Eraser ©   (03.03.08 22:24) [12]
>в смысле не строковых данных.

То есть строки все же данные. Но строки. Поэтому любые значения, помещаемые в строку, данными быть не перестают, да и ничем не отличаются от таких же, но в других структурах. Строка это только то, что мы интепретируем как строку. А работать, правильно, лучше с функциями, а не закладываться на внутреннее представление.



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

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

Наверх




Память: 0.52 MB
Время: 0.05 c
2-1204118277
Artem
2008-02-27 16:17
2008.03.30
Событие


2-1204469338
Evil
2008-03-02 17:48
2008.03.30
Проблеммы с TMemoryStream в TStringList...


15-1203259266
Alexd31
2008-02-17 17:41
2008.03.30
чем можно открыть DDF файл?


4-1184506481
Deeman
2007-07-15 17:34
2008.03.30
Панель задач


2-1204474078
switch
2008-03-02 19:07
2008.03.30
Перемещение по картинкам