#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));
}