Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование своей кодировки в программе 
:(
    Опции темы
TheSCS
  Дата 23.1.2012, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.1.2012

Репутация: нет
Всего: нет



Есть таблица символов http://worms2d.info/WA_character_table , это кодировка игрового чата. Кириллицу в других кодировках не понимает.

Следовательно, как мне ее использовать в программе? Чтобы я ввёл кириллицу и в чат пришла именно кириллица а не кракозябры?

Прошу разъяснить подробнее, т.к. с кодировками никогда не сталкивался. smile 
PM MAIL   Вверх
Чучмек
Дата 23.1.2012, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



А вот таблица Windows-1251
user posted image
Вот и подумай, как из одного получить другое


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
TheSCS
Дата 23.1.2012, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.1.2012

Репутация: нет
Всего: нет



Цитата

Прошу разъяснить подробнее

 smile 
PM MAIL   Вверх
Чучмек
Дата 23.1.2012, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



Лень таблицу соответствия составить?
Код

var mn:array[$C0..$FF]of byte =(
$41,$80,$42,$81,$82,$45,$83,$84,$85,$86,$87,$88,$4D,$48,$4F,$89,
$50,$43,$54,$8A,$8B,$58,$8C,$8D,$8E,$8F,$90,$91,$92,$93,$94,$96,
$61,$97,$98,$99,$9A,$65,$9B,$9C,$9D,$9E,$A2,$A5,$A6,$A7,$6F,$A8,
$70,$63,$A9,$79,$AA,$78,$AB,$AC,$AD,$AE,$AF,$B0,$B1,$B2,$B3,$B4);
...
...
...
for i:=1 to length(s) do if byte(s[i])>=$C0 then s[i]:=char(mn[byte(s[i])]);



--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
northener
Дата 23.1.2012, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Чучмек @  23.1.2012,  22:52 Найти цитируемый пост)
Лень таблицу соответствия составить?

Таблица не полная smile 


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Чучмек
Дата 24.1.2012, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



И обратное преобразование
Код

var mm:array[$80..$B4]of byte=(
$C1,$C3,$C4,$C6,$C7,$C8,$C9,$CA,$CB,$CF,$D3,$D4,$D6,$D7,$D8,$D9,
$DA,$DB,$DC,$DD,$DE,$95,$DF,$E1,$E2,$E3,$E4,$E6,$E7,$E8,$E9,$9F,
$A0,$A1,$EA,$A3,$A4,$EB,$EC,$ED,$EF,$F2,$F4,$F6,$F7,$F8,$F9,$FA,
$FB,$FC,$FD,$FE,$FF);
...
...
for i:=1 to length(s) do if (byte(s[i])>=$80)and(byte(s[i])<=$B4) then s[i]:=char(mm[byte(s[i])]);


Цитата(northener @  23.1.2012,  22:56 Найти цитируемый пост)
Таблица не полная smile

И чего не хватает?

Добавлено через 4 минуты и 52 секунды
Ёё???


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
northener
Дата 24.1.2012, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Чучмек @  24.1.2012,  00:09 Найти цитируемый пост)
Ёё??? 

Её родимую. smile
Почему узрел сию недоделку - потому что много раз писал такие преобразования для разных ЖК дисплеев/индикаторов. И куда только не суют нашу Ёё, блин! smile
Отказаться от этой буквы мне не хочется. Да и отказаться в такой теме не возможно!



--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
northener
Дата 24.1.2012, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Ну и от юникода тоже придётся отказаться.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
TheSCS
Дата 24.1.2012, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.1.2012

Репутация: нет
Всего: нет



Так, пораскинул мозгами и набросал массив из символов игровой кодировки и функцию кодирования.

Код

const
  ruschars: Array[0..158] of Char = ({SYMOLS & DIGITS -->>}'!','"','#','$','%','&',#39,'(',')','*','+',',','-','.','/','0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?','[','\',']','^','_','`','{','|','}','~','@',
                                'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',
                                'P','Q','R','S','T','U','V','W','X','Y','Z',
            'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o',
                                'p','q','r','s','t','u','v','w','x','y','z',
                                'Й','й',' ','А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З',
                                'К','И', 'Л', 'М', 'Н', 'О', 'П', 'Р',
                                'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш',
                                'Щ', 'Ь', 'Ъ', 'Э', 'Ю', 'Я','а', 'б',
                                'в', 'г', 'д', 'е', 'ж', 'з','к','и','л',
                                'м', 'н', 'о', 'п', 'р','с', 'т','у',
                                'ф', 'х', 'ц', 'ч', 'ш','щ', 'ь','ъ',
                                 'э', 'ю', 'я','ы','Ы');
  wachars: Array[0..158] of Char = ({SYMBOLS & DIGITS -->>}#$21,#$22,#$23,#$24,#$25,#$26,#$27,#$28,#$29,#$2A,#$2B,#$2C,#$2D,#$2E,#$2F,#$30,#$31,#$32,#$33,#$34,#$35,#$36,#$37,#$38,#$39,#$3A,#$3B,#$3C,#$3D,#$3E,#$3F,#$5B,#$5C,#$5D,#$5E,#$5F,#$60,#$7B,#$7C,#$7D,#$7E,#$40,
                 {UPPER ENG -->}#$41,#$42,#$43,#$44,#$45,#$46,#$47,#$48,#$49,#$4A,#$4B,#$4C,#$4D,#$4E,#$4F,
                                #$50,#$51,#$52,#$53,#$54,#$55,#$56,#$57,#$58,#$59,#$5A,
                {LOWER ENG -->>}#$61,#$62,#$63,#$64,#$65,#$66,#$67,#$68,#$69,#$6A,#$6B,#$6C,#$6D,#$6E,#$6F,
                                #$70,#$71,#$72,#$73,#$74,#$75,#$76,#$77,#$78,#$79,#$7A,
                {UPPER RUS -->>}#$86,#$9E,#$20,#$41,#$80,#$42,#$81,#$82,#$45,#$83,#$84,#$87,#$85,#$88,#$4D,#$48,
                                #$4F,#$89,#$50,#$43,#$54,#$8A,#$8B,#$58,#$8C,#$8D,#$8E,#$8F,#$92,
                                #$90,#$93,#$94,#$96,{LOWER RUS -->>}#$61,#$97,#$98,#$99,#$9A,#$65,
                                #$9B,#$9C,#$A2,#$9D,#$A5,#$A6,#$A7,#$6F,#$A8,#$70,#$63,#$A9,#$79,
                                #$AA,#$78,#$AB,#$AC,#$AD,#$AE,#$B1,#$AF,#$B2,#$B3,#$B4,#$B0,#$91);

//*************************************
function Encode(input:string ) :string;
var
lead: String;
i,j: Integer;
begin
lead:='';
for i:= 0 to 158 do for j:= 0 to 158 do begin
        if input[i] = ruschars[j] then begin
            lead := lead + wachars[j];

        end;
end;
result:=copy(lead,0,Length(input));
end;

function Decode(input:string ) :string;
var
lead: String;
i,j: Integer;
begin
lead:='';
for i:= 0 to 158 do for j:= 0 to 158 do begin
        if input[i] = wachars1[j] then begin
            lead := lead + ruschars1[j];

        end;
end;
result:={copy(lead,0,Length(input))}lead;
end;


Вот как-то так. Ф-ция Encode работает нормально, а вот Decode сдваивает латинские символы (в игровой кодировке все похожие русские буквы заменяются латинскими, х, р, Х,Р,Т,Н,и т.д.)

Например, пишу я в игре "тест гепа кернес", а в программе "теесст гeепaа кeеpрнeеcс".

Ясно, что надо переделывать массив символов, с нуля писать нет времени, да и фиксить тоже.
Поршу помощи  smile
PM MAIL   Вверх
Чучмек
Дата 24.1.2012, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



Цитата(TheSCS @  24.1.2012,  16:57 Найти цитируемый пост)
for i:= 0 to 158 do for j:= 0 to 158 do begin
        if input[i] = wachars1[j] then begin
            lead := lead + ruschars1[j];



if ... then begin
lead:=...
break;
end;
...

Добавлено через 6 минут и 27 секунд
И сколько времени занимает перекодировка строки длинной $100000 символов?
Мой код -  100ms, для 3.4ГГц это плохой показатель.


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
TheSCS
Дата 24.1.2012, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.1.2012

Репутация: нет
Всего: нет



Нет там таких строк =) максимум 150.

>> Мой код -  100ms
Засекал чоли?
PM MAIL   Вверх
Чучмек
Дата 24.1.2012, 21:57 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



Цитата(TheSCS @  24.1.2012,  20:09 Найти цитируемый пост)
Засекал чоли?

Да
Код

var p:PAnsiChar;
...
...
getmem(p,256*256*256);
for i:=0 to 256*256*256-1 do PByte(Cardinal(p)+i)^:=1+random(254);
t:=GetTickCount;
S1toS2(p);
t:=GetTickCount-t;
...



--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
drkot
Дата 26.1.2012, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: нет
Всего: 8



Цитата(Чучмек @  24.1.2012,  19:42 Найти цитируемый пост)
Мой код -  100ms, для 3.4ГГц это плохой показатель.

if убери из кода
делай полную таблицу вместе с латиницей, один цикл и все.


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Чучмек
Дата 26.1.2012, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



Цитата(drkot @  26.1.2012,  17:12 Найти цитируемый пост)
if убери из кода

Да, я знаю.
Кроме того, надо делать asm  вставку.  При инициализации выравнять таблицу на $XXXXXX00.  37ms - лимитируется только быстродействием памяти.


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Rennigth
Дата 27.1.2012, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



GetTickCount не совершенна smile


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1337 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.