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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.12.2009, 23:25
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 11  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от bicubic_bublic Посмотреть сообщение
s32 - от 1 до 5 байт
readInt - считывает 4 байта
Это у вас какой-то свой s32. А в народе s32 — обычный signed int 32.

Старый 09.12.2009, 23:27
bicubic_bublic вне форума Посмотреть профиль Найти все сообщения от bicubic_bublic
  № 12  
Ответить с цитированием
bicubic_bublic
Banned
[+4 25.09.09]
[+1 12.11.09]
[+4 12.12.09]

Регистрация: Sep 2009
Сообщений: 231
Цитата:
Сообщение от etc Посмотреть сообщение
Это у вас какой-то свой s32. А в народе s32 — обычный signed int 32.
повторюсь:
Цитата:
The variable-length encoding for u30, u32, and s32 uses one to five bytes, depending on the magnitude of the
value encoded. Each byte contributes its low seven bits to the value. If the high (eighth) bit of a byte is set,
then the next byte of the abcFile is also part of the value. In the case of s32, sign extension is applied: the
seventh bit of the last byte of the encoding is propagated to fill out the 32 bits of the decoded value.
источник: http://www.adobe.com/devnet/actionsc...m2overview.pdf

Старый 10.12.2009, 09:05
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 13  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Это всё читается одним и тем же методом. Во всяком случае, за два с половиной года после прочтения этой доки проблем не возникло.
А за терминологию Adobe нужно оторвать руки по пояс.

Старый 10.12.2009, 11:25
bicubic_bublic вне форума Посмотреть профиль Найти все сообщения от bicubic_bublic
  № 14  
Ответить с цитированием
bicubic_bublic
Banned
[+4 25.09.09]
[+1 12.11.09]
[+4 12.12.09]

Регистрация: Sep 2009
Сообщений: 231
Цитата:
Сообщение от etc Посмотреть сообщение
Это всё читается одним и тем же методом. Во всяком случае, за два с половиной года после прочтения этой доки проблем не возникло.
А за терминологию Adobe нужно оторвать руки по пояс.
а в какой именно документации ошибка - спецификация avm2 или ByteArray?
то есть если я напишу .writeInt(1) - то на выходе будет 1 байт или 4 ?

Старый 10.12.2009, 11:48
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 15  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от bicubic_bublic Посмотреть сообщение
а в какой именно документации ошибка - спецификация avm2 или ByteArray?
Не ошибка, а изменение терминологии в документации. s32 — вполне себе signed int 32 и без всяких variable-length, как везде. Кроме Adobe.

Цитата:
Сообщение от bicubic_bublic Посмотреть сообщение
то есть если я напишу .writeInt(1) - то на выходе будет 1 байт или 4 ?
Не вижу смысла задавать вопрос, ответ на который известен.

Старый 10.12.2009, 12:06
DEAFFF вне форума Посмотреть профиль Отправить личное сообщение для DEAFFF Посетить домашнюю страницу DEAFFF Найти все сообщения от DEAFFF
  № 16  
Ответить с цитированием
DEAFFF
 
Аватар для DEAFFF

Регистрация: Feb 2004
Адрес: Россия, В. Новгород
Сообщений: 255
Отправить сообщение для DEAFFF с помощью ICQ
уважаемый etc давайте не будем спорить, мы щаз говорим о разных вещах, вы об общепринятых u32 s32 а мы об условно так же названных но variable-length encoding for u30, u32, and s32 для файла абс виртуальной машины.
__________________
зная будущее, хотя бы, на 10 минут вперед, можно покорить весь мир...

Старый 10.12.2009, 12:12
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 17  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
А я говорю, что всё читается одним и тем же методом.

Старый 10.12.2009, 12:57
DEAFFF вне форума Посмотреть профиль Отправить личное сообщение для DEAFFF Посетить домашнюю страницу DEAFFF Найти все сообщения от DEAFFF
  № 18  
Ответить с цитированием
DEAFFF
 
Аватар для DEAFFF

Регистрация: Feb 2004
Адрес: Россия, В. Новгород
Сообщений: 255
Отправить сообщение для DEAFFF с помощью ICQ
bicubic_bublic

слушай с u30 и u32 вроде чтение запись работает, правда запись иногда зацикливается...

а s32 вообще странно работает пишу одно число, а считывается другое )))

вот коды:

Код AS3:
public function writeVarUint32(value:uint):void
{
	if (value == 0) 
	{
		_byteArray.writeByte(0);
	}
 
	var byte:uint;
	while (value != 0) 
	{
		byte = value & 0x0000007f; // отрезаем 7 бит от числа
		value = value >> 7; //смещаем на 7 бит
		if (value != 0)  //если что-то еще осталось добавляем 8-й бит флаг
		{
			byte = byte | 0x00000080;
		}
		_byteArray.writeByte(byte); //пишем текущий байт..
	}
}
 
public function readVarInt32():int
{
	var result:int = _byteArray.readUnsignedByte();
		if (!(result & 0x00000080))
			return (result << 25 ) >> 25;
	result = (result & 0x0000007f) | _byteArray.readUnsignedByte()<<7;
		if (!(result & 0x00004000))
			return (result << 18 ) >> 18;
	result = (result & 0x00003fff) | _byteArray.readUnsignedByte()<<14;
		if (!(result & 0x00200000))
			return (result << 11 ) >> 11;
	result = (result & 0x001fffff) | _byteArray.readUnsignedByte()<<21;
		if (!(result & 0x10000000))
			return (result << 4 ) >> 4;
	return (result & 0x0fffffff) | _byteArray.readUnsignedByte()<<28;
}
 
public function writeVarInt32(value:int):void
{
	if (value >= 0) 
	{
		writeVarUint32(value);
		return;
	}
 
	var len:uint = 0;
	var abs:uint = - value; // абсолютное значение value;
 
	while (abs != 0) // длина в битах абсолютного значения
	{
		abs = abs >> 1;
		len++;
	}
 
	abs = - value;
 
	var signBytePos:uint = Math.floor(len / 7) + 1; // длина s32, порядковый номер байта в котором содержится знак-бит;
 
	while (signBytePos-- != 0) {
		var byte:uint = abs & 0x0000007f; // отрезаем 7 бит от числа
		abs = abs >> 7; //смещаем на 7 бит
		if (signBytePos != 0) //если что-то еще осталось добавляем 8-й бит флаг
		{
			byte = byte | 0x00000080;
		}
		else //последний байт - добавляем знак-бит
		{
			byte = byte | 0x00000040;
		}
		_byteArray.writeByte(byte); //пишем текущий байт..
	}
}
Добавлено через 1 минуту
etc
ребята из swf utils читают почему то по другому ? )) из того что я привел выше в коде функции чтения их
__________________
зная будущее, хотя бы, на 10 минут вперед, можно покорить весь мир...

Старый 10.12.2009, 14:17
bicubic_bublic вне форума Посмотреть профиль Найти все сообщения от bicubic_bublic
  № 19  
Ответить с цитированием
bicubic_bublic
Banned
[+4 25.09.09]
[+1 12.11.09]
[+4 12.12.09]

Регистрация: Sep 2009
Сообщений: 231
да.. немного намудрил с s32
Код AS3:
public function writeVarInt32(value:int):void
{
	if (value == 0) 
	{
		_byteArray.writeByte(0);
		return;
	}
 
	var len:uint = 0;
	var signByte:uint = (0x80000000 & uint(value)) >> 25; // знак-бит (перемещаем на место 7го бита)
	var abs:uint = 0x7fffffff & uint(value); // значение без знака
 
	while (abs != 0) // длина в битах
	{
		abs = abs >> 1;
		len++;
	}
 
	abs = 0x7fffffff & uint(value);
 
	var signBytePos:uint = Math.floor(len / 7) + 1; // длина s32, порядковый номер байта в котором содержится знак-бит;
 
	while (signBytePos-- != 0) {
		var byte:uint = abs & 0x0000007f; // отрезаем 7 бит от числа
		abs = abs >> 7; //смещаем на 7 бит
		if (signBytePos != 0) //если что-то еще осталось добавляем 8-й бит флаг
		{
			byte = byte | 0x00000080;
		}
		else //последний байт - добавляем знак-бит
		{
			byte = byte | signByte;
		}
		_byteArray.writeByte(byte); //пишем текущий байт..
	}
}

Старый 10.12.2009, 14:34
DEAFFF вне форума Посмотреть профиль Отправить личное сообщение для DEAFFF Посетить домашнюю страницу DEAFFF Найти все сообщения от DEAFFF
  № 20  
Ответить с цитированием
DEAFFF
 
Аватар для DEAFFF

Регистрация: Feb 2004
Адрес: Россия, В. Новгород
Сообщений: 255
Отправить сообщение для DEAFFF с помощью ICQ
все равно что то не то
записываю число = -22222
получаю = B2 D2 FE FF C7
читая получаю = 2147461426

если записывать просто = 22222
то получим = CE AD 01 FF C7
читаем = 22222

что бы это значило?
__________________
зная будущее, хотя бы, на 10 минут вперед, можно покорить весь мир...

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

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

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


 


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


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