|
|
|||||
как прочесть и записать u30 число?
вопрос к профессионалам
делаю небольшой декомпилятор на ас3, дошел уже до ABC тега там в принципе не сложно, но есть какие то числа: Цитата:
http://www.adobe.com/devnet/actionsc...m2overview.pdf есть достаточно похожий опенсорс проект swfutils http://swfutils.riaforge.org/ но к сожалению там тока чтение этих чисел, например u30 у них читается так: public function readEU32():uint { var result:uint = _dataInput.readUnsignedByte(); if (!(result & 0x00000080)) return result; result = (result & 0x0000007f) | _dataInput.readUnsignedByte()<<7; if (!(result & 0x00004000)) return result; result = (result & 0x00003fff) | _dataInput.readUnsignedByte()<<14; if (!(result & 0x00200000)) return result; result = (result & 0x001fffff) | _dataInput.readUnsignedByte()<<21; if (!(result & 0x10000000)) return result; return (result & 0x0fffffff) | _dataInput.readUnsignedByte()<<28; };
__________________
зная будущее, хотя бы, на 10 минут вперед, можно покорить весь мир... |
|
|||||
Banned
[+4 25.09.09]
[+1 12.11.09] [+4 12.12.09] Регистрация: Sep 2009
Сообщений: 231
|
оттуда же:
Цитата:
function writeU32(ba:ByteArray, value:uint) { if (value == 0) { ba.writeByte(0); } var byte:uint; while (value != 0) { byte = value & 0x0000007f; // отрезаем 7 бит от числа value = value >> 7; //смещаем на 7 бит if (value != 0) { //если что-то еще осталось добавляем 8-й бит флаг byte = byte | 0x00000080; } ba.writeByte(byte); //пишем текущий байт.. } } Последний раз редактировалось bicubic_bublic; 09.12.2009 в 19:02. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
|
|
|||||
ооо спасибо ребята!!!
а что на счет u32 и s32? интересует чтение и запись...
__________________
зная будущее, хотя бы, на 10 минут вперед, можно покорить весь мир... |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
u32 и s32 можно прочитать стандартными методами ByteArray.
|
|
|||||
это то я понимаю )))
я имею ввиду эти два The types u32 and s32 represent variable-length encoded 32-bit unsigned and signed integer values respectively. они подобны u30 на сколько я понял
__________________
зная будущее, хотя бы, на 10 минут вперед, можно покорить весь мир... |
|
|||||
Banned
[+4 25.09.09]
[+1 12.11.09] [+4 12.12.09] Регистрация: Sep 2009
Сообщений: 231
|
Цитата:
Цитата:
Добавлено через 6 минут function writeS32(ba:ByteArray, value:int):void { if (value >= 0) { writeU32(ba, 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) { byte = abs & 0x0000007f; // отрезаем 7 бит от числа abs = abs >> 7; //смещаем на 7 бит if (signBytePos != 0) { //если что-то еще осталось добавляем 8-й бит флаг byte = byte | 0x00000080; } else { //последний байт - добавляем знак-бит byte = byte | 0x00000040; } ba.writeByte(byte); //пишем текущий байт.. } } Последний раз редактировалось bicubic_bublic; 09.12.2009 в 21:52. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
bicubic_bublic, s32 вообще-то обычный writeInt/readInt. Единственное, что нужно читать ручками — u30.
|
|
|||||
Banned
[+4 25.09.09]
[+1 12.11.09] [+4 12.12.09] Регистрация: Sep 2009
Сообщений: 231
|
Цитата:
readInt - считывает 4 байта |
|
|||||
спасибо! ))) буду пробовать
__________________
зная будущее, хотя бы, на 10 минут вперед, можно покорить весь мир... |
Часовой пояс GMT +4, время: 01:39. |
|
« Предыдущая тема | Следующая тема » |
|
|