Расширение знака ActionScript3 с индексированным доступом к ByteArray - PullRequest
0 голосов
/ 19 декабря 2009

В следующем коде:

var bytes:ByteArray = new ByteArray();

var i:int = -1;
var j:int;

bytes[0] = i;    // bytes[0] = -1 == 0xff
j = bytes[0];    // j == 255;

int j заканчивается значением 255, а не -1. Кажется, я не могу найти документ, определяющий, как индексированный доступ к ByteArray должен быть расширенным знаком - могу ли я с уверенностью предположить такое поведение, или я должен предпринять шаги для усечения таких значений до 8-битных величин? Я портирую кучу кода из Java и предпочел бы использовать индексированный доступ, а не методы readByte () и т. Д.

1 Ответ

0 голосов
/ 19 декабря 2009

Интерфейс IDataInput (реализованный ByteArray) сообщает:

Расширение знака имеет значение только при чтении данных, а не при их записи. Следовательно, вам не нужны отдельные методы записи для работы с IDataInput.readUnsignedByte () и IDataInput.readUnsignedShort ().

То же самое, естественно, применимо к [] доступу к массиву, поэтому вам не нужно обрезать перед записью.

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

j= j<<24>>>24;

и аналогично с >> для подписи. Однако, поскольку ActionScript является единственной реализацией, а не общим стандартом, вам, вероятно, не нужно беспокоиться об этом

...