Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2010, 12:05   #1
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
Печаль кидировка Encode7bit

Помогите плиз как кодировать кирилецу в Encode 7 bit
вот код как кадировать латиницу
Код:
function Encode7bit(Src:String):String;
var Dst:String;
    i:Integer;
    CurS,NextS:Byte;
    TStr:String;
begin
  for i:=1 to Length(Src) do begin
    if (i mod 8)=0 then Continue;
    TStr:=Copy(Src,i,1);
    CurS:=Ord(TStr[1]);
    if (i mod 8)>1 then
      CurS:=(CurS shr ((i mod 8)-1) );
    if i<Length(Src) then begin
      TStr:=Copy(Src,i+1,1);
      NextS:=Ord(TStr[1]);
    end else
      NextS:=0;
    NextS:=(NextS shl (8-(i mod 8)));
    Dst:=Dst+IntToHex(CurS+NextS,2);
  end;
  Result:=Dst;
end;
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 08.06.2010, 18:05   #2
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
Счастье

Всё разабрался
вдруг у ково нибудь тоже возникнет впрос то вот
Цитата:
Само сообщение состоит из HEX-последовательности, прописанной ASCII-символами (0..9,A..F).
Пример - надо отправить сообщение абоненту +79212345678 и в нем написать 'Привет'.
ВНИМАНИЕ! РЕЧЬ ИДЕТ О ТОМ, КАК ЭТО СДЕЛАТЬ ПРОГРАММНО (или через HyperTerminal), А НЕ С ПОМОЩЬЮ, например, SiMoCo. Т.е. ручками.
Итак:
1. Берем бумажку и составляем последовательность:
00 - всегда - это означает, что телефон/модем берет адрес сервис-центра SMS из Симки
11 - всегда
00 - указывает, что в качество отправителя будет указан собственный номер тел/модема
0B - длина цифр телефонного номера = 11(дес)
91 - указывает на интернациональный формат тел. номера (+7...)
9712325476F8 - номер адресата, которому отправляем SMS
Тут интересно -
1. в начале записываем номер (на другую бумажку)
2. проверяем, четное ли количество цифр и если нет (как у нас - 11), добавляем в конце "F"
3. переставляем каждые две цифры местами - получаем результат
В нашем случае:
79212345678
79212345678F
9712325476F8
00 - идентификатор протокола
08 - формат кодирования сообщения - в нашем случае - USC2
17 - время действия SMS
возможные коды (дес)
0-143: (код + 1)*5минут - наш случай ((17H = 23дес) + 1)*5=120минут=2часа
144-167: 12 часов + (код - 143)*30минут
168-196: (код - 166) * 1день
197-255: (код - 192) * 1неделя
0C - количество байт в сообщении = количество символов*2, т.к. USC2
041F П
0440 р
0438 и
0432 в
0435 е
0442 т
Коды символов соответствуют нормальному Unicode. Можно посмотреть, например, встроенную программу "Таблица символов", выбрать шрифт, например Arial, прокрутить вниз до начала кириллицы и посмотреть их коды (отображаются в HEX-виде внизу окна).

2. Даем команду тел/модему
AT+CMGF=0 - включаем режим PDU
AT+CMGS=26 - длина байтов сообщения (по 2 цифры), без учета первого нулевого байта
>0011000B919712325476F80008170C041F 04400438043204350442Ctrl+Z
+CMGS: 13 - это уже ответ модема

OK
вот код кодирования кириллицы
Код:
function ucs2(s: string): string;
var i,k: integer;
begin
for i:=1 to length(s) do begin
  k:= ord(s[i]);
  if k>=192 then k:= k + 1040 - 192;
  result:= result + inttohex(k,4)
end
end;
P.S. Нашёл через гугл на одном древнейшем сайте
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц