Числовое представление с плавающей запятой в ActionScript?

Можно ли получить необработанные байты числового объекта с плавающей запятой (IEEE-754) в ActionScript?

Или, наоборот, если я могу получить знак (1 бит), мантиссу (52 бита) и показатель степени (11 бит), тогда я могу выполнить сдвиг битов и построить необработанный массив байтов.

Я хотел бы создать точные, компактные строковые представления числовых значений (шестнадцатеричное, base-36, base-64 и т. Д.) Для определенных ситуаций сериализации.

Меня также может заинтересовать создание компактных 16-битных чисел с плавающей запятой (половинная точность IEEE) и их упаковка в плотные массивы байтов.

Например, в Java я мог бы написать такой код для создания точных строковых представлений двойников:

public static String hexRepresentation(double value) {
   long bits = Double.doubleToLongBits(value);
   String hex = Long.toHexString(bits);
   return hex;
}

public static String b36Representation(double value) {
   long bits = Double.doubleToLongBits(value);
   String hex = Long.toString(bits, 36);
   return hex;
}

public static void main(String[] args) {
   System.out.println(hexRepresentation(123.456)); // 405edd2f1a9fbe77
   System.out.println(hexRepresentation(Math.PI)); // 400921fb54442d18

   System.out.println();

   System.out.println(b36Representation(123.456)); // z8nf9qi2e5pz
   System.out.println(b36Representation(Math.PI)); // z21th0e6pjiw
}

Если у кого-то есть идеи, как сделать то же самое в ActionScript, я хотел бы знать. Но пока это не кажется возможным. А как насчет этих новых кодов операций в FP10 для алхимии? Есть ли там что-нибудь, что позволяет как-то добраться до необработанных байтов?


person benjismith    schedule 14.08.2009    source источник


Ответы (1)


Я почти уверен, что вы могли бы сделать это, просто создав массив байтов, а затем вызвав для него writeFloat. Затем вы можете считывать каждый байт с помощью readByte, затем сдвигать и маскировать по мере необходимости, чтобы получить именно то, что вы хотите.

person Branden Hall    schedule 15.08.2009
comment
Ах. Конечно! Это похоже на приведение указателя типа float к указателю int в C. Очень хорошо. - person benjismith; 16.08.2009