Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.08.2011, 16:50
maljavka вне форума Посмотреть профиль Отправить личное сообщение для maljavka Найти все сообщения от maljavka
  № 1  
Ответить с цитированием
maljavka

Регистрация: Aug 2011
Сообщений: 30
По умолчанию метод перевода массива байт в осмысленную строку в нужной кодировке

Здравствуйте.
Вот возникла такая проблемка.
Значится, пишу "упрощенный до нельзя" приемник snmp trap на actionScript. Приходит trap с кучей различной информации, но меня интересует только текстовое поле. Всё приходит в виде ByteArray.
Отправляется вот такая строка:
snmptrap.exe -c public -v 2c 172.16.0.101:162 "" 1.3.3.3.3.3.3.3 1.2.2.2.2.2.2 s "Некая строка"
Кодируется это всё через ASN.1 автоматически на стороне отправителя.
Принимаю через DatagramSocket.
Читаю так:
Код AS3:
event.data.readUTFBytes( event.data.bytesAvailable )
Получается текстовая строка
0\ public�O '�

До этого писал такую же штуку на C++. И простой манипуляцией:

Код:
    void __fastcall TForm1::ServerSocketUDPRead(TObject *Sender,
          TStream *AData, TIdSocketHandle *ABinding)
    {
    char *resp = (ServerSocket->ReceiveString()).c_str();
    }

получал указатель на полную закодированную строку в 94 символа, в которой было много белиберды, но строка "Некая строка" и сообщения была нормально читаемой и с ней можно было работать.
Как мне сделать примерно такое же в ActionScript? Может есть какой-то метод перевода массива байт в осмысленную строку в нужной кодировке?..
readMultiByte(...); тоже ничего осмысленного не приносит, или чего-то неправильно указываю...
Пользовался AS3Crypto, но там DER, а не BER, и не подходит. Да и не надо мне все поля целиком знать. Только сопутствующий текст.
Спасибо

Старый 22.08.2011, 17:42
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
А что Вы указываете в readMultiByte ?
И что значит "в нужной кодировке"? Вы знаете, в какой именно кодировке?
__________________
Reality.getBounds(this);

Старый 22.08.2011, 17:43
toFL вне форума Посмотреть профиль Найти все сообщения от toFL
  № 3  
Ответить с цитированием
toFL
Banned

Регистрация: May 2011
Адрес: +48° 27' 57.93", +35° 2' 46.02"
Сообщений: 447
Записей в блоге: 2
Отправить сообщение для toFL с помощью Skype™
Проблема в отправляемых байтах. Видимо кодируете не в формат Action Message Format (AMF). Либо не в UTF8.

Старый 22.08.2011, 17:48
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Попробуйте начать читать с определенного position
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 22.08.2011, 18:06
maljavka вне форума Посмотреть профиль Отправить личное сообщение для maljavka Найти все сообщения от maljavka
  № 5  
Ответить с цитированием
maljavka

Регистрация: Aug 2011
Сообщений: 30
Цитата:
А что Вы указываете в readMultiByte ?
И что значит "в нужной кодировке"? Вы знаете, в какой именно кодировке?
в readMultiByte указываются соответственно сколько байтов и название кодировки, взятое http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/charset-codes.html
Пробовал различные, но поскольку не знаю какая именно нужна, вот и занимался перебором. Может там и UTF-8 идет изначально. Не знаю.

Цитата:
Проблема в отправляемых байтах. Видимо кодируете не в формат Action Message Format (AMF). Либо не в UTF8.
Как проверить и как исправить? Может снифером послушать? Он укажет что как приходит интересно... Строка отправляется одинаковая и для программы на C++ и для AS. Но в С++ при использовании указателя на строку можно нормально читать. Никаких манипуляций с кодировками и всё такое.

Цитата:
Попробуйте начать читать с определенного position
Что именно читать? Строку или массив? readUTFBytes возвращает уже готовую строку, которая меня не устраивает. Длина приходящего сообщения 94 байта. Длина string полученной при использовании readUTFBytes Всегда 21 символ. И не важно сколько текстовых данных приходит в сообщении. То есть она уже принимает какую-то неполную строку. Надо плясать именно от массива Byte.

Добавлено через 16 часов 45 минут
Есть идеи?

Добавлено через 17 часов 49 минут
Просмотрел весь массив, который приходит. Там строка внутри имеется уже, только в виде кодов. То есть с помощью
Код AS1/AS2:
String.fromCharCode(myArray[i])
можно получить необходимую информацию. Просмотрев внимательно почему всегда строка всего 21 символ обнаружил, что в данной позиции myArray[21] = 0. Игнорирую если имеется ноль и строка идет нормально.
В общем, всем спасибо.

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.