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

Вернуться   Форум Flasher.ru > Flash > Flash Приложения: AIR, Zinc и тд.

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.04.2011, 12:07
jester88 вне форума Посмотреть профиль Отправить личное сообщение для jester88 Найти все сообщения от jester88
  № 21  
Ответить с цитированием
jester88

Регистрация: Mar 2011
Сообщений: 16
Сделал точно так как вы сказали, ошибка #2030 исчезла, но вместо поданной единицы (Double) получаю 3.0386519416174186e-319...

Старый 19.04.2011, 12:13
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 22  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Тут уже дело в формате Double. Видать по разному интрепретируют.
Посмотрите, что приходит побитово:

Код AS3:
for (var i:int = 0; i < event.data.length; i++)
{
trace (event.data.readByte().toString(2));
}
покажите сюда.
__________________
Отряд Котовскага

Старый 19.04.2011, 12:25
jester88 вне форума Посмотреть профиль Отправить личное сообщение для jester88 Найти все сообщения от jester88
  № 23  
Ответить с цитированием
jester88

Регистрация: Mar 2011
Сообщений: 16
Получается так:
Код AS3:
0
0
0
0
0
0
-10000
111111
Добавлено через 6 минут
Я вот еще что заметил, когда пытался инты считывать. AIR только числа от 0 до 127 считывает корректно, число 128 для него уже интерпретируется не как 128, а как -128, 129 это -127 и так до 256, 256 соответсвенно становится нулем.

Добавлено через 8 минут
Единица, которую я посылаю в байтовом представлении выглядит так:
Код AS3:
0
0
0
0
0
0
240
63
Добавлено через 19 минут
Я так понимаю, что исходя из этого всего, единица в побитовом предсталении должна выглядеть так:
Код AS3:
0
0
0
0
0
0
11110000
111111
а AIR ее видит как:
Код AS3:
0
0
0
0
0
0
-10000
111111
Добавлено через 29 часов 16 минут
Всем привет!
Я все-таки решил проблему с приемом данных двойной точности.
Код AS3:
public function dataReceived(event:DatagramSocketDataEvent):void 
{
	//создаем массив wrongArray(), в который записываем приходящие байты
	wrongArray = new Array();
	//В Матлабе числа двойной точности Double разбивается на 8 байтов, например
	//число 11,53 представляется в виде [143, 194, 245, 40, 92 , 15, 39, 64].
	//Проблема заключается в том, что AIR интерпретирует входящие байты корректно только
	//в диапазоне от 0 до 127. Число 128 интерпретируется как -128, 129 как -127,
	//и так до 255, которое представляется как -1.
 
	for (var i:int = 0; i < event.data.length; i++)
	{
	//записываем в wrongArray() приходящие байты
	wrongArray.push(event.data.readByte());
	//создаем массив arrayB, с помощью этого массива будем изменять некорректные байты
	var arrayB:Array = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,-128,-127,-126,-125,-124,-123,-122,-121,-120,-119,-118,-117,-116,-115,-114,-113,-112,-111,-110,-109,-108,-107,-106,-105,-104,-103,-102,-101,-100,-99,-98,-97,-96,-95,-94,-93,-92,-91,-90,-89,-88,-87,-86,-85,-84,-83,-82,-81,-80,-79,-78,-77,-76,-75,-74,-73,-72,-71,-70,-69,-68,-67,-66,-65,-64,-63,-62,-61,-60,-59,-58,-57,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46,-45,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35,-34,-33,-32,-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1];
	//в цикле заменяем числа, находящиеся в диапазоне [-128: -1] на [128:255]
	for (var j:int = 0; j < 255; j++)
	{
		if (wrongArray[i] == arrayB[j])
		{
			//если i-ый элемент массива wrongArray окажется равен j-му элементу
			//массива arrayB, то заменяем i-ый элемент массива wrongArray()на индекс 
			//j-ого элемента массива arrayB
			var ind:int = j;
			wrongArray[i] = ind;
		}
	}
	}
	//в Матлабе, как выяснилось, главный байт почему-то находится в конце, хотя в документации
	//написано, что в начале, поэтому необходимо обратить полученный массив wrongArray()
	wrongArray = wrongArray.reverse();
 
	//создаем байтовый массив ba() и записываем в него поэлементно весь массив wrongArray()
	ba = new ByteArray();
	for (var k:int = 0; k < wrongArray.length; k++)
	{
		ba[k] = wrongArray[k];
	}
	//наконец, когда получен корректный байтовый массив ba(), считываем 
	//с помощью readDouble() данные из него по 8 байт
	for (var h:int = 0; h < ba.length; h+=8)
	{
		trace(ba.readDouble());
	}
}
Наверное все это можно провернуть как-то проще, ну да ладно.
Всем огромное спасибо за помощь!

Тему можно закрыть.


Последний раз редактировалось jester88; 19.04.2011 в 12:45.
Создать новую тему Ответ Часовой пояс GMT +4, время: 17:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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