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

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

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

Регистрация: Nov 2008
Сообщений: 78
По умолчанию protobuf-actionscript3 не пишет тип Number

Насколько я поняла это официально зафиксированный баг.
Может кто-то фиксил напильником?

Старый 23.02.2011, 01:13
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Я просто не совсем в курсе, а к какому из протобаф типов относится флешевый Number? И нельзя ли заменить на int / uint?
__________________
Hell is the possibility of sanity

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

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
не встречал этого бага. А можно подробности?
Вот методы чтения/записи
Код AS3:
	  /** Read a {@code float} field value from the stream. */
	  public function readFloat():Number {
	    return readRawLittleEndian32();
	  }
 /** Read a 32-bit little-endian integer from the stream. */
	  public function readRawLittleEndian32():int {
	    var b1:int = readRawByte();
	    var b2:int = readRawByte();
	    var b3:int = readRawByte();
	    var b4:int = readRawByte();
	    return ((b1 & 0xff)      ) |
	           ((b2 & 0xff) <<  8) |
	           ((b3 & 0xff) << 16) |
	           ((b4 & 0xff) << 24);
	  }
Код AS3:
	  /** Write a {@code float} field, including tag, to the stream. */
	  public function writeFloat(fieldNumber:int, value:Number):void {
	    writeTag(fieldNumber, WireFormat.WIRETYPE_FIXED32);
	    writeRawLittleEndian32(value);
	  }
	  /** Write a little-endian 32-bit integer. */
	  public function writeRawLittleEndian32(value:int):void {
	    writeRawByte((value      ) & 0xFF);
	    writeRawByte((value >>  8) & 0xFF);
	    writeRawByte((value >> 16) & 0xFF);
	    writeRawByte((value >> 24) & 0xFF);
	  }
UPD. Да есть косяк. Number преобразовывается в int
Мне как то не попадались float в моих проектах. Поэтому баг не замечал.
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 23.02.2011 в 01:54.
Старый 23.02.2011, 11:56
kyzi007 вне форума Посмотреть профиль Отправить личное сообщение для kyzi007 Найти все сообщения от kyzi007
  № 4  
Ответить с цитированием
kyzi007

Регистрация: Nov 2008
Сообщений: 78
И еще я смогла прочитать только свою ютф строку
То что сделал серверщик недопереварилось.
А я в записях в байтах ни в зуб ногой(
Второй рабочий день и показала ся дубом(

А изменять на инты нельзя.

Старый 23.02.2011, 18:27
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 5  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код:
0	Varint	int32, int64, uint32, uint64, sint32, sint64, bool, enum
1	64-bit	fixed64, sfixed64, double
2	Length-delimited	string, bytes, embedded messages, packed repeated fields
3	Start group	groups (deprecated)
4	End group	groups (deprecated)
5	32-bit	fixed32, sfixed32, float
Это типы которые может записать протобаф. Каким образом вы записиваете флешевый Number?
__________________
Hell is the possibility of sanity

Старый 23.02.2011, 19:24
kyzi007 вне форума Посмотреть профиль Отправить личное сообщение для kyzi007 Найти все сообщения от kyzi007
  № 6  
Ответить с цитированием
kyzi007

Регистрация: Nov 2008
Сообщений: 78
Я записывала всеми способами которые только есть для чисел в протобуфе, если покопатся в исходниках видно что поддержка намберов там планируется но не доделана.
Как и таинственный тип гроуп который только в константах живет но не обрабатывается.

Старый 23.02.2011, 20:15
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 7  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Хорошо... поставим вопрос по-другому... на каком языке написана принимающая сторона, что принимающая сторона ожидает получить? Самое простое решение было бы записывать Number просто как 8 байт (ByteArray), и тогда если на принимающей стороне существует аналог Number от туда его и прочитать. Есть еще вариант, записать Number как 2 int64, один знаковый для целой части, другой - нет - для дробной. Этого бы точно хватило, чтобы Number поместился. Но это ровно в 2 раза больше, чем нужно для того, чтобы записать Number.
__________________
Hell is the possibility of sanity

Старый 23.02.2011, 20:44
kyzi007 вне форума Посмотреть профиль Отправить личное сообщение для kyzi007 Найти все сообщения от kyzi007
  № 8  
Ответить с цитированием
kyzi007

Регистрация: Nov 2008
Сообщений: 78
Так я в самом флеше не могу прочитать что сформировала.
Делать два инта мне запретили.
Чесно гря даже не знаю на чем сервер, помоему на си.

Они хотят чтобы все работало без костылей. И без правки серверной части протобуфа.
А дробные числа будут туда-сюда летать толпами и со свистом...

Старый 23.02.2011, 21:13
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 9  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
если он дробные не может передавать, прийдется альтернативы использовать: байтаррай, строкой, можно нумбер умножить на 10000 и получиться инт, сервер один фиг, чего то делает с данными, пусть делит инт на 10000 и будут нормальные нумберы.
__________________
Гоночка

Старый 23.02.2011, 23:18
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 10  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну дробные - вы определитесь, может вам хватит float? И вы не ответили на вопрос. Как сервер присылает Number - откуда вы его пробуете прочитать? (В protobuf есть float - это, на сколько я понимаю 32 бита, и есть double, это, по-идее и должен быть флешевый Number). Если мое предположение правильное, то используйте соответствующие методы ByteArray - read/writeFloat и read/writeDouble... Я не уверен какой endian используется в protobuf, но, опять же, вариантов у вас всего два, если не big endian, то small endian.
__________________
Hell is the possibility of sanity

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

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

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


 


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


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