Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

StringOf


Страницы:   1 2

Gu ©   (2011-12-03 19:42:00) 

StringOf = массив байт в строку. А как строку в массив байт?

B:TBytes;s:string;
..
s:=TBytes(b);

компилит норм но показывет только 1 символ


DVM   (2011-12-03 22:10:00) [21]


> Gu   (03.12.11 22:02) [12]


> тот пример не работал потомучто тогда стринги еще ансями
> были :)

"Тот пример" тоже будет работать (причем в любой Delphi в нем размер Char проверяется):

var
   buf: TBytes;
   s: String;
begin
   s := Edit1.Text;
   SetLength(buf, Length(s) * SizeOf(Char));
   if s <> '' then Move(s[1], buf[0], Length(buf));
end;


Gu   (2011-12-03 22:02:00) [22]

во.
тот пример не работал потомучто тогда стринги еще ансями были :)
спасибо dvm, но мне нужно было для string в xe, решение уже нашел, выше см.


DVM   (2011-12-03 21:59:00) [23]


> Обратное однозначное преобразование невозможно.

Строку в массив байт невозможно?

Массив байт в строку то он уже нашел.


DVM   (2011-12-03 21:55:00) [24]


> Gu   (03.12.11 20:31) [6]


var
 b: TBytes;
 S, S1: AnsiString;
begin
 S := 'ПРИВЕТ!';
 SetLength(B, Length(S));
 Move(S[1], B[0], Length(S));
 S1:=StringOf(B);
 Caption := S1;
end;


Gu   (2011-12-03 21:53:00) [25]

нашел
b:=TEncoding.Unicode.GetBytes(s);


Ega23   (2011-12-03 21:53:00) [26]


> для особо непонятливых:


Для особо непонятливых: строка это массив символов (char). В Ansi-случае AnsiChar и Byte суть одно и то же.
В unicode-случае char и byte не одно и то же, размер Char более одного байта.
Соответственно, твоя функция // Converts a byte array into a Unicode string using the default system locale.
Обратное однозначное преобразование невозможно. Это как интеграл берёшь, с конце "плюс С" не просто так добавляется.

В простейшем случае:
var
 aStr: AnsiString;
 wStr: string;
begin
 wStr := string(aStr);
 aStr := AnsiString(wStr);
end;


sniknik   (2011-12-03 21:25:00) [27]

> // Converts a byte array into a Unicode stringusing the default system locale.
"обратная" в общем случае невозможна. получишь набор из вопросов.

чего не понятно?


Gu   (2011-12-03 20:31:00) [28]

если не знаете ответа нечего писать.
для особо непонятливых:

есть функция
function StringOf(Bytes:TBytes):String;
// Converts a byte array into a Unicode string using the default system locale.
нужна обратная
function AntiStringOf(str:String):TBytes;

чего не понятно?


sniknik   (2011-12-03 20:22:00) [29]

> это понятно. только вопрос не об этом
если бы было понятно, то вопроса бы не было.
строка и так уже массив байт. разница только в интерпретации... ну вот чтобы сменить, свое к ним отношение, домашнее задание 1000 раз повторить мантру - "это уже массив байт, это уже массив байт, ...".

> нужна функция обратная StringOf. Из string получить tbytes
чего??? еще раз по ручки, начни с описания чего делает, как ты понимаешь, StringOf... и что есть для нее "обратная"? только не функцией, а описанием действия.


Gu   (2011-12-03 19:54:00) [30]

нужна функция обратная StringOf. Из string получить tbytes


Gu   (2011-12-03 19:50:00) [31]

это понятно. только вопрос не об этом


Ega23   (2011-12-03 19:44:00) [32]

Строка и так уже массив байт.


Gu   (2011-12-03 19:43:00) [33]

http://embarcadero.newsgroups.archived.at/public.delphi.rtl/200907/0907291663.html

тут есть один пример но он не фурычит


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо