|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Mar 2011
Сообщений: 16
|
Сделал точно так как вы сказали, ошибка #2030 исчезла, но вместо поданной единицы (Double) получаю 3.0386519416174186e-319...
|
|
|||||
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Тут уже дело в формате Double. Видать по разному интрепретируют.
Посмотрите, что приходит побитово: покажите сюда.
__________________
Отряд Котовскага |
|
|||||
Регистрация: Mar 2011
Сообщений: 16
|
Получается так:
Добавлено через 6 минут Я вот еще что заметил, когда пытался инты считывать. AIR только числа от 0 до 127 считывает корректно, число 128 для него уже интерпретируется не как 128, а как -128, 129 это -127 и так до 256, 256 соответсвенно становится нулем. Добавлено через 8 минут Единица, которую я посылаю в байтовом представлении выглядит так: Добавлено через 19 минут Я так понимаю, что исходя из этого всего, единица в побитовом предсталении должна выглядеть так: а AIR ее видит как: Добавлено через 29 часов 16 минут Всем привет! Я все-таки решил проблему с приемом данных двойной точности. 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. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|