Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 088

/ вопрос открыт /

Здравствуйте, эксперты!
Мне нужно перевести USSD ответ (СМС)
из такого
04110430043B0430043D0441003A002000390037002C003000350020002
E0020002A041304430434043E043A002C0020042F0432043000200438002
0041E043D002D043B04300439043D0020041804330440044B002C002004
1C04430437044B043A043000210020041D04300431043804400430043900
20002A0035003700390023
в такой вид
Баланс: 97,05 . *Гудок, Ява и Он-лайн Игры, Музыка! Набирай *579#

Берем по 4 символа и преобразуем в 2 байта и переварачиваем байты.
1104 - Б

Ни как нимогу решить эту задачу. Помогите пожалуйста!

Zlodey Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Zlodey (статус: Посетитель)
Вопрос отправлен: 15 ноября 2008, 14:30
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 30; последнее сообщение — 16 декабря 2008, 09:27; участников в обсуждении: 3.

Страницы: [1] [2] [Следующая »]

Dron

Dron (статус: Студент), 15 ноября 2008, 15:06 [#1]:

Судя по всему, это шестнадцатеричные представления кодов символов из Unicode. Один символ = 4 символа в последовательности.
С уважением.
Zlodey

Zlodey (статус: Посетитель), 15 ноября 2008, 15:14 [#2]:

да только перевернуты
11 04 - Б
30 04 - а
3B 04 - л
30 04 - а
Zlodey

Zlodey (статус: Посетитель), 15 ноября 2008, 15:19 [#3]:

на бейсики это выглядит так

Private Function USSDConv(lpStr As String) As String
Dim i As Long
USSDConv = String$(Len(lpStr) \ 4, 0)
For i = 0 To Len(USSDConv) - 1
Mid$(USSDConv, i + 1, 1) = ChrW$(CLng("&H" & Mid$(lpStr, i * 4 + 1, 4)))
Next i
End Function

А мне нужно на Delphi
Dron

Dron (статус: Студент), 15 ноября 2008, 15:34 [#4]:

Упс, не заметил окончания вопроса...
Сейчас попробуем сделать на Delphi. Только вот с Юникодом не всё так просто...
С уважением.
Dron

Dron (статус: Студент), 15 ноября 2008, 15:53 [#5]:

Вообще-то, в Юникоде буква "Б" - 1041. Что-то не сходится. Да и ведь русский алфавит в этой окрестности. Откуда там 3004 - непонятно.
С уважением.
Zlodey

Zlodey (статус: Посетитель), 15 ноября 2008, 16:21 [#6]:

у меня в hex редакторе есть калькулятор и он мне переводит Unicode как 11 04 это буква Б.
Dron

Dron (статус: Студент), 15 ноября 2008, 17:05 [#7]:

Странно...
Только нужно определиться: 1104 - это hex-код или десятичный?
1104h = 4356
А букву "Б" на вебе проверял: & # 1041; - это как раз "Б".
С уважением.
Вадим К

Вадим К (статус: Академик), 15 ноября 2008, 17:19 [#8]:

С каких это пор буква Б имеет код 1041 если пожизни у неё был код 0431?
Настоятельно рекомендую всем вначале почитать, что такое Big Endian и little Endian. Потом, что такое юникод и какой он бывает.
вот вольный перевод кода
procedure TForm1.Button1Click(Sender: TObject);
  var s:string;
  i:integer;
  USSDConv:WideString;
begin
  s := '04110430043B0430043D0441003A002000390037002C003000350020002E0020002A041'+
       '304430434043E043A002C0020042F04320430002004380020041E043D002D043B043004'+
       '39043D0020041804330440044B002C0020041C04430437044B043A043000210020041D0'+
       '430043104380440043004390020002A0035003700390023';
  SetLength(USSDConv, round(length(s)/4));
  for i := 0 to Length(USSDConv) - 1 do
    USSDConv[i + 1] := WideChar(strtoint('$' + copy(s, i * 4 + 1, 4)));
  Edit1.text := USSDConv;
end;

Замечания раз. А менее рекламное сообщения нельзя было вставить?
Замечания два. Зачем стучаться в асю, дублировать вопросы? тем более с таким ником.
Галочка "подтверждения прочтения" - вселенское зло.
Zlodey

Zlodey (статус: Посетитель), 15 декабря 2008, 09:18 [#9]:

А как можно определить кодировку ? допустим заместо кодированного текста пришел такой
S := 'Hello' программа выдает ошибку!
Вадим К

Вадим К (статус: Академик), 15 декабря 2008, 11:15 [#10]:

Текст пришёл не в той кодировке? А внимательно заголовок PDU смотрели? там просто указана кодировка - 7, 8 или 16 бит.
Галочка "подтверждения прочтения" - вселенское зло.
Zlodey

Zlodey (статус: Посетитель), 15 декабря 2008, 12:14 [#11]:

даже не в кодировке а просто текст на английском языке.
т.е. может приходить кодированный ввиде hex.
а может просто текс на английском.

Мне нужно сделать условие что если приходит в hex выполнялась раскодировка, а если просто текс то пропускала раскодировку.
Вадим К

Вадим К (статус: Академик), 15 декабря 2008, 12:32 [#12]:

Вы точно поняли, что сказали?
Скажу по секрету, весь текст приходит всегда в хексе:) и в двоичном коде. И виде битиков....
А что это будет - зависит от интерпретации.
Галочка "подтверждения прочтения" - вселенское зло.
Zlodey

Zlodey (статус: Посетитель), 15 декабря 2008, 12:42 [#13]:

AT ответ может приходить ввиде в том что я указал в шапке.
А может в нормальном (напимер "Hello") и нечего раскодировать не нужно!
Вадим К

Вадим К (статус: Академик), 15 декабря 2008, 12:49 [#14]:

Сколько работал с телефонами, не видел такой проблемы. Ну нет в телефоне генератора случайных чисел, по которому он то так, то так выдаёт ответ. Либо так запрашиваете, либо надо смотреть внимательней, в ответе написана кодировка.
Лог обмена в студию, разберём.
Галочка "подтверждения прочтения" - вселенское зло.
Zlodey

Zlodey (статус: Посетитель), 15 декабря 2008, 12:57 [#15]:

я запрашиваю баланс если все нормально с сетью то приходит ответ ввиде (04110430043B04 ....)
Если есть какието проблемы ссетью(перегружена) то он пишет (error.....)
Модем GPRS
Вадим К

Вадим К (статус: Академик), 15 декабря 2008, 12:59 [#16]:

Где лог?
Я уже приблезительно догадываюсь, что там происходит, то гадать на кофейной гуще очень сложно.
Возможно для Вас наличие/отсутствие одной точки не важно, а она может играть важную роль.
Галочка "подтверждения прочтения" - вселенское зло.
Zlodey

Zlodey (статус: Посетитель), 15 декабря 2008, 13:07 [#17]:

лог щас нет. И получить тяжело будет. Сеть то не всегда глючить ;)
Zlodey

Zlodey (статус: Посетитель), 15 декабря 2008, 13:17 [#18]:

Текс приходит между двух кавычек("...")
Вадим К

Вадим К (статус: Академик), 15 декабря 2008, 13:17 [#19]:

Вот с этого и надо начинать. error - это ответ телефона, а не сети.
А если всё хорошо, то он обычно там приходит OK. Смотрите аккуратно.
Галочка "подтверждения прочтения" - вселенское зло.
Zlodey

Zlodey (статус: Посетитель), 15 декабря 2008, 13:23 [#20]:

нет это ответ сети потому что он был между 2-х кавычек.

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 28 марта 2020, 22:04
Выполнено за 0.02 сек.
Рейтинг@Mail.ru