Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как преобразовать несколько байт из ByteArray в int (http://www.flasher.ru/forum/showthread.php?t=113804)

Niagon 09.07.2008 16:47

Как преобразовать несколько байт из ByteArray в int
 
Требуется взять из ByteArray несколько байтов, отмерить от первого байта несколько бит и все остальные биты преобразовать в int. Как это лучше сделать? Необходимо сохранение знака.

например
Код:

0101001110011101101101100
    ----------------

Здесь я взял 3 байта отмерил от начала 4 бита и хочу преобразовать 16 следующих бит в int. Помогите чем можете.

etc 09.07.2008 18:38

Случайно это не попытка прочитать swf_rect?

wvxvw 09.07.2008 18:59

Код:

var bin_source:String = '11111111110100111001110110110110'; //32 bit integer
var bin_int:int = parseInt(bin_source, 2);
trace(bin_source);
var ba:ByteArray = new ByteArray();
ba.writeInt(bin_int);
ba.position = 0;
var result:int = ba.readInt();
//trace(result.toString(2));
var signesToStrip:int = 3;
var mask0:uint = uint(2 << (signesToStrip - 1)) - 1;
var mask1:uint = uint(2 << (31 - signesToStrip));

result = result - mask0 * mask1; //drop 3 bits from the start
trace(result.toString(2));

Ну, как-нть так...

etc 09.07.2008 19:13

Цитата:

Сообщение от wvxvw (Сообщение 751150)
Код:

var bin_source:String = '11111111110100111001110110110110'; //32 bit integer
var bin_int:int = parseInt(bin_source, 2);
trace(bin_source);
var ba:ByteArray = new ByteArray();
ba.writeInt(bin_int);
ba.position = 0;
var result:int = ba.readInt();
//trace(result.toString(2));
var signesToStrip:int = 3;
var mask0:uint = uint(2 << (signesToStrip - 1)) - 1;
var mask1:uint = uint(2 << (31 - signesToStrip));

result = result - mask0 * mask1; //drop 3 bits from the start
trace(result.toString(2));

Ну, как-нть так...

Та уж проще:
Код:

var src:String = '0101001110011101101101100';
trace(src);
src = src.substr(4, 16);
var bin:Number = parseInt(src, 2);
trace(bin.toString(2));

:D

wvxvw 09.07.2008 19:54

Эээээ... ну как бы строки там только для того, чтобы было видно, что в байтаррей будет записано... для работы они не нужны...

etc 09.07.2008 21:36

Цитата:

Сообщение от wvxvw (Сообщение 751174)
Эээээ... ну как бы строки там только для того, чтобы было видно, что в байтаррей будет записано... для работы они не нужны...

Ну мало ли, а вдруг строками будет проще :quiet:

Niagon 10.07.2008 17:01

Строками проще, но уж больно медленно. Спасибо попробую.

Цитата:

Случайно это не попытка прочитать swf_rect?
А что такое если не секрет?

etc 10.07.2008 18:05

Цитата:

Сообщение от Niagon (Сообщение 751348)
А что такое если не секрет?

Это из спецификации формата swf.


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

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