Вверх ↑
Этот топик читают: Гость
Ответов: 5227
Рейтинг: 587
#16: 2007-12-27 22:48:26 ЛС | профиль | цитата
NOD ну уже заинтреговали, ну намекните что хоть с чем связываете если не секрет, а мы глядишь и мысль дадим какую...
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 9906
Рейтинг: 351
#17: 2007-12-28 00:56:35 ЛС | профиль | цитата
nesco писал(а):
Байт 0 есть символ пустой строки

Да ну

#sha
Add(Button,14463846,98,112)
{
Left=95
Top=110
link(onClick,9146630:doConvert,[])
}
Add(Convertor,9146630,154,112)
{
Mode=4
link(onResult,6311351:doLength,[])
}
Add(Length,6311351,217,112)
{
link(onLength,2643987:doMessage,[])
}
Add(Message,2643987,280,112)
{
}
карма: 9

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#18: 2007-12-28 01:09:06 ЛС | профиль | цитата
Galkov, я не спорю, что длина его равна 1, потому, что код 0, все же, занимает один байт, но ведь это -- пустой символ для формата Str, или я ошибаюсь?
карма: 22

0
Ответов: 9906
Рейтинг: 351
#19: 2007-12-28 01:15:46 ЛС | профиль | цитата
nesco писал(а):
или я ошибаюсь?

Зависит от того, что такое "формат Str"
Например, то, чего на Length поступает

#sha
Add(Button,2495959,161,119)
{
Left=160
Top=115
Data=String(30000000000030)
link(onClick,2824398:doConvert,[])
}
Add(Stream2Hex,2824398,224,119)
{
Mode=3
link(onResult,5739883:doLength,[])
}
Add(Length,5739883,287,119)
{
link(onLength,8786575:doMessage,[])
}
Add(Message,8786575,357,119)
{
}
-это "формат Str", или нет
карма: 9

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#20: 2007-12-28 01:46:13 ЛС | профиль | цитата
Если верить функции преобразования


    function Hex2Str  (const S:String): String;
То и вход и выход -- строковый.
Если рассмотреть твою строку 30 00 00 00 00 00 30, то здесь, действительно семь символов.

карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#21: 2007-12-28 11:25:50 ЛС | профиль | цитата
nesco, символа пустой строки нет. Есть символ окончания строки - 0х00, который понимается как таковой всеми WinAPI функциями и языком С(и прочими наследниками). Чаще же всего вместе со срокой хранят её реальную длинну и 0х00 там ничем не отличается от любого иного символа.
карма: 27
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#22: 2007-12-28 12:32:48 ЛС | профиль | цитата
Dilma писал(а):
Чаще же всего вместе со срокой хранят её реальную длинну и 0х00 там ничем не отличается от любого иного символа
0-я позиция массива PChar содержит длину строки, так кажется?

Dilma писал(а):
Есть символ окончания строки - 0х00
Возьму на заметку (век живи -- век учись )
карма: 22

0
Ответов: 9906
Рейтинг: 351
#23: 2007-12-28 13:11:18 ЛС | профиль | цитата
nesco писал(а):
0-я позиция массива PChar содержит длину строки, так кажется?

Не факт что нулевая, не факт что содержит, не факт, что длину строки
И кстати, кто такой "массив PChar"
карма: 9

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#24: 2007-12-28 13:29:25 ЛС | профиль | цитата
Galkov писал(а):
И кстати, кто такой "массив PChar"
Ну, вообщем, это не массив, а указатель (дааа, чаще мне надо в справку заглядывать )
Dprus14.hlp писал(а):
При работе со строками с нулевым символом в конце часто используют специальные типы указателей
: PChar и PWideChar, которые являются указателями соответственно на массивы с элементами типов Char и WideChar с нулевым символом в конце. Переменные этих типов часто требуется передавать в различные функции и процедуры в качестве параметров. К тому же, типы PChar и PWideChar существенно упрощают коды. Дело в том, что эти типы совместимы со строковыми константами. Например, объявление и использование переменной типа PChar может иметь вид:

var P: PChar;
...
P := 'Привет!';

Это эквивалентно операторам

const SHello: array[0..7] of Char = 'Привет!'#0;
var P: PChar;
...
P := @SHello;


А вот, что написано про тип String

Dprus14.hlp писал(а):
Со строками можно оперировать как с индексированными массивами символов. Например, S[i] - это символ, расположенный в строке в позиции i (индексы отсчитываются от 1, т.е. индекс 1 соответствует первому символу)

Вот только я припоминаю, что где-то на форуме писали, что 0-й индекс содержит длину строки.
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#25: 2007-12-28 13:34:10 ЛС | профиль | цитата
тип PChar можно представить так:

#pas
_PChar = array[0..0] of char;
PChar = ^_PChar;
или в нотации языка С:

#cpp
typedef char* PChar;

никаких длин он нигде не хранит. Видимо перепутано с:

#pas
<myvar>:string[255];
вот тут в 0-м символе содержится длина(не путать с типом string)
карма: 27
0
Ответов: 9906
Рейтинг: 351
#26: 2007-12-28 13:37:20 ЛС | профиль | цитата
В твоем примере P^ = 'П' - и всего делов.
Причем тут какой-то нулевой индекс - не пойму....
карма: 9

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#27: 2007-12-28 13:40:26 ЛС | профиль | цитата
Galkov, ну что, все же, содержит s[0]
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#28: 2007-12-28 13:42:36 ЛС | профиль | цитата
Dilma писал(а):
вот тут в 0-м символе содержится длина(не путать с типом string)

карма: 27
0
Ответов: 9906
Рейтинг: 351
#29: 2007-12-28 13:47:40 ЛС | профиль | цитата
nesco писал(а):
Galkov, ну что, все же, содержит s[0]

Первое: я не вижу определения переменной s
Но, если это string, то авторы софта утверждают: не твое это собачье дело.
И никак иначе.
Т.е., именно так, как я сказал:
Galkov писал(а):
Не факт что нулевая, не факт что содержит, не факт, что длину строки

карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#30: 2007-12-28 13:49:49 ЛС | профиль | цитата
еще раз: длинну строки в 0-м символе содержит Pascal нотация времен DOS, которая была представлена выше. Строка типа string в 0-м символе может содержать все, что угодно в зависимости от версии компилятора.
карма: 27
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)