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

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

Unicode в Строку


Страницы:   1 2

Mouserx ©   (2005-02-15 18:06:00) 

Скажите как перевести юникод в строку.
Есть у меня некий блок данных, где каждый байт - буква в формате иникод. Как мне текст из этого блока данных получить в виде строки?


Anatoly Podgoretsky   (2005-02-15 21:21:00) [21]

Mouserx   (15.02.05 21:09) [10]
Вот например в SHex у меня есть следующее:
'04 3F 04 40 04 38 04 3C 04 35 04 40 00 00'

Узнаю русский язык.
Надо отдельно преобразвывать четную и нечетную пару к виду $O43F, эту последовательность через StrToInt присваивать WideChar или к WideString[i], пока не встретишь код $0000 это признак конца строки. Вот такой алгоритм. Код напишешь сам, он тривиальный.


Adder   (2005-02-15 21:19:00) [22]

Примерно так...

unit UnicodeUnit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls,WinSock, ExtCtrls;
type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Button1: TButton;
   Memo1: TMemo;
   Panel1: TPanel;
   Panel2: TPanel;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;
var
 Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
   i:integer;
   Size:integer;
   s:String;
   Buffer:PByte;
   B:PWord;
   W:PWideChar;
begin
   S:=StringReplace(Edit1.Text,' ','',[rfReplaceAll]);//+'0000';
   if S<>'' then
   begin
       GetMem(Buffer,Length(S) div 2);
       Size:=HexToBin(PChar(@S[1]), PChar(Buffer), Length(S) div 2);
       b:=PWord(Buffer);
       i:=0;
       while i < Size do begin b^:=htons(b^);Inc(b,1);inc(i,2);end;
       W:=PWideChar(Buffer);
       Memo1.Lines.Add(WideCharLenToString(W,Size));
   end;
end;

end.


Eraser   (2005-02-15 21:15:00) [23]

Mouserx

И там именно строка с хекс кодами?
Или всётаки как-нибудь можно достать указатель на эти данные?


Mouserx   (2005-02-15 21:14:00) [24]


> Eraser ©   (15.02.05 21:05) [9]
> Mouserx
>
> Откуда у тебя эта последовательность байтиков в 16-ричном
> ввиде?


С игрушки.


> Может не стоит так заморачиваться...

Стоит. Очень надо.


Mouserx   (2005-02-15 21:09:00) [25]


> Anatoly Podgoretsky

Ето я знаю,
но в [3] вы мне говорите про 4 байта а это уже будет в хекс 8 символов.

И собственно по сабжу.
Вот например в SHex у меня есть следующее:
'04 3F 04 40 04 38 04 3C 04 35 04 40 00 00'

как мне получить из этого нужную строку и наоборот?

Покажите пожалуйста код. Спасибо.


Eraser   (2005-02-15 21:05:00) [26]

Mouserx

Откуда у тебя эта последовательность байтиков в 16-ричном ввиде?
Может не стоит так заморачиваться...


Anatoly Podgoretsky   (2005-02-15 19:57:00) [27]

Потому что Юникод16 это 2 байта, а в двух хекс символах можно отразить только один байт. Вспоиминая математику получаем 2*2 итого 4 символа, оно же в просторечье 4 байта. напримет код 00 00 (два байта) в хекс будет '0000'


Mouserx   (2005-02-15 19:55:00) [28]


> Anatoly Podgoretsky


Почему 4?

а можно пример пожалуйста для моего случая?


Anatoly Podgoretsky   (2005-02-15 19:31:00) [29]

Alexander Panov ©   (15.02.05 19:29) [5]
Думаешь? Он эе молчит о точном формате данные, пока не приведет образец данных можно только гадать, а это дело неблагодарное :-(


Alexander Panov   (2005-02-15 19:29:00) [30]

см. MultiByteToWideChar


Vit@ly   (2005-02-15 19:29:00) [31]

:)?


Anatoly Podgoretsky   (2005-02-15 19:25:00) [32]

Тогда повторно ошибся, для представления одного символа требуется лва байта, для юникода соотвественно 4.


Mouserx   (2005-02-15 18:46:00) [33]


> Юрий Зотов

Я ошибся. 2 байта.
Имееться ввиду например есть у меня SHex : String в которой содержиться последовательность байтиков в 16-ричном ввиде.
Эта последовательность байтиков - Null Terminated Unicode message

Меня волнует как получить текст из этой последовательности и как сделать обратное действие.


Юрий Зотов   (2005-02-15 18:22:00) [34]

> каждый байт - буква в формате иникод

Разве в юникоде не двухбайтовые символы?


Страницы:   1 2

Наверх

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