Сокращение чтения байтового массива AS3

#actionscript-3 #bytearray

#actionscript-3 #bytearray

Вопрос:

я должен прочитать последовательность байтов, которая была записана по-разному (writeBite, writeShort и writeMultiByte), и отобразить их со списком шестнадцатеричных байтов на видео. Моя проблема заключается в преобразовании числа 1500, я попробовал другое число, и результаты были правильными… вот пример:

 var bytes:Array = [];
var ba:ByteArray = new ByteArray();
ba.writeShort(1500);

ba.position = 0;

for (var i=0; i<ba.length; i  )
{
   bytes.push(ba.readByte().toString(16));
}
trace(bytes);//5,-24 i'm expetting 5,DC
  

Ответ №1:

Метод readByte считывает байт со знаком (в диапазоне от -128 до 127). Старший значащий бит определяет знак. В случае чисел, превышающих 127 (например DC ), этот бит будет 1 равен, и число будет рассматриваться как отрицательное число. Для получения значения со знаком используется дополнение двух отрицательных байтов. В случае DC , который находится 1101 1100 в двоичном формате, дополнением будет 0010 0011 which is 23 . Добавляется единица, и значение будет считаться отрицательным, что даст вам -24 то, что вы видите.

Вы должны использовать readUnsignedByte для чтения значений от 0 до 255.

Ответ №2:

Поскольку в AS3 нет реального байтового типа, readByte() возвращает значение int . Вы можете попробовать это вместо:

 for (var i=0; i<ba.length; i  )
{
    bytes.push(ba[i].toString(16));
}