![]() |
|
||||||||||
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Это у вас какой-то свой s32. А в народе s32 — обычный signed int 32.
|
|
|||||
|
Banned
[+4 25.09.09]
[+1 12.11.09] [+4 12.12.09] Регистрация: Sep 2009
Сообщений: 231
|
повторюсь:
Цитата:
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Это всё читается одним и тем же методом. Во всяком случае, за два с половиной года после прочтения этой доки проблем не возникло.
А за терминологию Adobe нужно оторвать руки по пояс. |
|
|||||
|
Banned
[+4 25.09.09]
[+1 12.11.09] [+4 12.12.09] Регистрация: Sep 2009
Сообщений: 231
|
Цитата:
то есть если я напишу .writeInt(1) - то на выходе будет 1 байт или 4 ? |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Цитата:
Не вижу смысла задавать вопрос, ответ на который известен. |
|
|||||
|
уважаемый etc давайте не будем спорить, мы щаз говорим о разных вещах, вы об общепринятых u32 s32 а мы об условно так же названных но variable-length encoding for u30, u32, and s32 для файла абс виртуальной машины.
__________________
зная будущее, хотя бы, на 10 минут вперед, можно покорить весь мир... |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
А я говорю, что всё читается одним и тем же методом.
|
|
|||||
|
bicubic_bublic
слушай с u30 и u32 вроде чтение запись работает, правда запись иногда зацикливается... а s32 вообще странно работает пишу одно число, а считывается другое ))) вот коды: 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); //пишем текущий байт.. } } etc ребята из swf utils читают почему то по другому ? )) из того что я привел выше в коде функции чтения их
__________________
зная будущее, хотя бы, на 10 минут вперед, можно покорить весь мир... |
|
|||||
|
Banned
[+4 25.09.09]
[+1 12.11.09] [+4 12.12.09] Регистрация: Sep 2009
Сообщений: 231
|
да.. немного намудрил с s32
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); //пишем текущий байт.. } } |
|
|||||
|
все равно что то не то
записываю число = -22222 получаю = B2 D2 FE FF C7 читая получаю = 2147461426 если записывать просто = 22222 то получим = CE AD 01 FF C7 читаем = 22222 что бы это значило?
__________________
зная будущее, хотя бы, на 10 минут вперед, можно покорить весь мир... |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:02. |
|
|
« Предыдущая тема | Следующая тема » |
|
|