Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 30.06.2010, 21:59  
begun
Гражданин KAZUS.RU
 
Регистрация: 18.07.2006
Сообщений: 861
Сказал спасибо: 229
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
begun на пути к лучшему
По умолчанию Программа для перевода септетов в октеты

здравствуйте!
В сигнализакиях МК+МОБ для отправки SMS врежиме PDU символы из 7-ми битной кодировки переводят в 8- ми битной по известному алгоритму.
Нет ли у кого программы на СИ или VB6 промзводящий такую перекодировку?
Заранее благодарен.
Реклама:
begun вне форума  
Непрочитано 01.07.2010, 03:01  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,949
Сказали Спасибо 1,327 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Программа для перевода септетов в октеты

Сообщение от begun Посмотреть сообщение
Нет ли у кого программы на СИ или VB6 промзводящий такую перекодировку?
Когда-то делал программы на Дельфях, перекодировка туда и обратно. Давно правда, но вроде работало. Погляжу завтра - на рабочем компе лежит, надеюсь, не похерил.
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума  
Непрочитано 01.07.2010, 12:13  
raxp
Почётный гражданин KAZUS.RU
 
Регистрация: 28.05.2010
Сообщений: 1,118
Сказал спасибо: 150
Сказали Спасибо 604 раз(а) в 310 сообщении(ях)
raxp на пути к лучшему
По умолчанию Re: Программа для перевода септетов в октеты

на си...
Код:
char cnv(char* s) // to MODNUM
{
	unsigned char i = 2;
	char temp;

	if (strlen(s)!= 13) {s[strlen(s)+1] = s[strlen(s)] + "F";}
	while (i‹strlen(s)+1)
	 {
		temp = temp + s[i+1] + s[i];
  		i++; i++;
	 }
	 return temp;
}

char cnv2(char* s) // to UCS2
{
	unsigned char i,k;
	char temp;
	for(i=1; i‹strlen(s); i++)
	 {
 		k = s[i]; //k = strchr(s, i); - выбрать i-й символ из строки s //char *k; static char s[] = "nrtfbae",
  		if (k › 0xC0)|(k == 0xC0)
		{
			k = k + 0x410 - 0xC0;
		} 
		temp = temp + k;
	 }
	return temp;  
}

char cnv3(char* s) // to UCS2
{
	char simv[] = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЭЮЯабвгдеёжзийклмнопр  стуфхцчшщэюяABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkl  mnopqrstuvwxyz0123456789"-* "; // строка
	char temp;

//	for (i=1; i‹strlen(s); i++) {temp = temp + ucs[strstr(simv, s[i])];}
	return temp;
}
char* cpdu(char sz,char num,char msg) // to PDU
{
	char* temp = '07' +         //07=06 для номера SMSC + 1 байт интернациональности SMSC
          		 '91' +          //91=интернациональность SMSC
          		 cnv(sz) +       //97103701F0=+790173100 плюс признак окончания номера F
          		 '01' +          //01=PDU Type: MTI=01 -› исходящий SMS
          		 '00' +          //00=MR - параметр, который устанавливается в SMSC
          		 strlen(num)-1 + //0B=длина номера получателя-1 (10 знаков в номере)
          		 '91' +          //91=интернациональность получателя
          		 cnv(num) +      //9710276338F6=+79017236836 - номер получателя
          		 '00' +          //00=PID идентификатор номера протокола
          		 '08' +          //08=DCS схема кодирования данных: кириллическое сообщение
          		 strlen(msg)*2 + //02=длина сообщения
          		 cnv2(msg);      //0410=сообщение: "А"
	return temp;
}
на delphi...
Код:
unit pdu7bits;

interface

function EncodePDU7bits(const Source: String): String;
function DecodePDU7bits(const CodedStr: String): String;

implementation

procedure Bin2Hex(Buffer, Text: PChar; BufSize: Integer); assembler;
const
  Convert: array[0..15] of Char = '0123456789ABCDEF';
  p: array[1..7] of Byte = ($1, $3, $7, $F, $1F, $3F, $7F);
var
  i, Count: Integer;
  c, Tmp, r: Byte;
begin
  r:= Byte(Buffer[0]);
  Count:= 1;
  for i := 0 to BufSize - 1 do
    if Count ‹ 8 then
    begin
      c:= r;
      if i ‹ (BufSize - 1) then
      begin
        Tmp:= Byte(Buffer[I + 1]);
        r:= Tmp shr Count;
        c:= c or ((Tmp and p[Count]) shl (8 - Count));
        Inc(Count);
      end;
      Text[0] := Convert[c shr 4];
      Text[1] := Convert[c and $F];
      Inc(Text, 2);
    end
    else
    begin
      Count:= 1;
      if i ‹ BufSize then
        r:= Byte(Buffer[i + 1]);
    end;
end;
      
function Hex2Bin(Text, Buffer: PChar; BufSize: Integer): Integer; assembler;
const
  Convert: array['0'..'f'] of SmallInt =
    ( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1,
     -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,
     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
     -1,10,11,12,13,14,15);

  p: array[1..7] of Byte = ($7F, $3F, $1F, $F, $7, $3, $1);

var
  i, Count: Integer;
  Tmp, c, r: Byte;
begin
  I := BufSize;
  Count:= 1;

  while i › 0 do
  begin
    if not (Text[0] in ['0'..'f']) or not (Text[1] in ['0'..'f']) then Break;

    c:= (Convert[Text[0]] shl 4) + Convert[Text[1]];
    tmp:= c shr (8 - Count);
    c:= c and p[Count];

    if Count › 1 then
      c:= (c shl (Count - 1)) or r;

    r:= Tmp;
    Buffer[0] := Char(c);

    if Count = 7 then
    begin
      Inc(Buffer);
      Buffer[0] := Char(r);
      Count:= 1;
    end
    else
      Inc(Count);

    Inc(Buffer);
    Inc(Text, 2);
    Dec(i);
  end;
  Result := BufSize - i;
end;   

function EncodePDU7bits(const Source: String): String;
var Leng: Integer;
begin
  Leng:= Length(Source);
  Leng:= (Leng * 2)- ((Leng div 8) * 2);
  SetLength(Result, Leng);
  Bin2Hex(PChar(Source), PChar(Result), Length(Source));
end;

function DecodePDU7bits(const CodedStr: String): String;
var Leng: Integer;
begin
  Leng:= Length(CodedStr) div 2;
  SetLength(Result, Leng+ (Leng div 7));
  Hex2Bin(PChar(CodedStr), PChar(Result), Leng);
end;

end.[/QUOTE]

или так:
[QUOTE]function cnv(s: string):string;
var i: integer;
begin
 delete(s,1,1);
 if length(s) mod 2›0 then s:=s + 'F';
 i:= 1;
 while (i‹length(s)+1) do begin
  result:= result + s[i+1]+s[i];
  inc(i);inc(i)
 end
end;
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;
function tcod: string;
begin
 if pduf.fsms.Checked then result:= 'F8'
  else result:= '08'
end;
function cpdu(ksz,sz,num,msg: string): string;
begin
 result:= inttohex(length(sz),2) +      // 07=длина номера SMSC
          '91' +                        // 91=интернациональность номера SMSC
          cnv(ksz + sz) +               // 97103701F0=+790173100 плюс признак окончания номера F
          '01' +                        // 01=PDU Type: MTI=01 -› исходящий SMS
          '00' +                        // 00=MR - параметр, который устанавливается в SMSC
          inttohex(length(num)-1,2) +   // длина номера получателя-1
          '91' +                        // 91=интернациональность получателя
          cnv(num) +                    // 9710276338F6=+79017236836 - номер получателя
          '00' +                        // 00=PID идентификатор номера протокола
          tcod +                        // F8/08=DCS схема кодирования на экран/вну: кириллическое
          inttohex(length(msg)*2,2)+    // длина сообщения
          ucs2(msg)                     // сообщение
end;

procedure Tpduf.tpduClick(Sender: TObject);
begin
 if (sz.Text='')and(ksz.Text='') then caption:= '  !!! номер центра будет взят из SIM'
  else caption:= '  PDU conversion TEST [Siemens C-35]';
 pdu.Text:= cpdu(ksz.Text, sz.Text,num.Text, txt.Text)
end;
Миниатюры:
Нажмите на изображение для увеличения
Название: picture1.jpg
Просмотров: 50
Размер:	98.8 Кб
ID:	9379   Нажмите на изображение для увеличения
Название: picture6.jpg
Просмотров: 55
Размер:	20.2 Кб
ID:	9380   Нажмите на изображение для увеличения
Название: picture6.2.png
Просмотров: 56
Размер:	10.5 Кб
ID:	9381  

Вложения:
Тип файла: pdf PDU это просто. Система оповещения GSM (Минск).pdf (460.0 Кб, 336 просмотров)
Тип файла: zip тестовый конвертор и компиляция.zip (171.4 Кб, 123 просмотров)
Тип файла: pdf формат SMS-PDU.pdf (22.0 Кб, 102 просмотров)
__________________
Белорусский журнал «Радиолюбитель»
Youtube LaboratoryW
UR3QQJ
raxp вне форума  
Сказали "Спасибо" raxp
begun (02.07.2010)
Непрочитано 01.07.2010, 12:56  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Программа для перевода септетов в октеты

Сообщение от begun Посмотреть сообщение
здравствуйте!
В сигнализакиях МК+МОБ для отправки SMS врежиме PDU символы из 7-ми битной кодировки переводят в 8- ми битной по известному алгоритму.
Нет ли у кого программы на СИ или VB6 промзводящий такую перекодировку?
Заранее благодарен.
Вроде в любом ..никсе есть проги UUencode+UUdecode. Исходники фришные, на каждом углу.
ut1wpr вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импульсная зарядка для авто-аккумуляторов (новодел) Falconist Источники питания и свет 1915 14.03.2024 19:56
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
Linux-ваше мнение Tvenn Делимся опытом 6169 23.08.2015 08:57
Все что нужно для начала работы с микроконтроллерами incm Микроконтроллеры, АЦП, память и т.д 157 31.10.2011 20:12


Часовой пояс GMT +4, время: 15:53.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot