1

bytearray を使用して Java からフラッシュに数値をバイナリ形式で転送する必要がありますが、フラッシュ as3 は float と long をサポートしていません。

Java long を double に変換しようとしても乱雑に見えるので、どうすればそれを行うことができますか?

public static void main(String[] args)
{
    long l = Long.MAX_VALUE/100;
    Double d= l;

    System.out.println("long  : " + l);
    System.out.println("double: " + (long)d);
}
run:

long  : 92233720368547758

double: 92233720368547760

BUILD SUCCESSFUL (total time: 1 second)

double に変換された後、長い数値は元の値を失いました!

4

2 に答える 2

1

あなたの観察は不正確です。Flash は float をサポートしています。NumberAS3 のクラスはdouble、Java の IEEE-754 倍精度 64 ビット浮動小数点です。ただし、ありませんlongNumberJava を格納するのに十分floatです。これも float ですが、大きさが小さいためです (32 ビットしか必要としません)。Flash はこれらの値を ByteArray に読み書きできますが、型階層に対応する型がありません。

long浮動小数点数を格納する形式では、他の目的のために一部のビットが予約されており、実際には浮動小数点数の値を保存するために 52 ビットしか使用されないため、Java と正確に類似することはできません。

本当に長いものが必要な場合、Flash でできること:

  • 簡単: 2 つの整数を使用します。

  • 複雑: 任意に選択されたビット数に制限されない長い計算用のクラスがいくつかあります。つまり、64 ビットをはるかに超える数の計算を行うことができます。これらは伝統的に BigInt などと呼ばれています。Google は、少なくとも 2 つの実装を見つける必要があります。暗号化ライブラリを検索してください。ほとんどすべてのライブラリが動作するためにこのクラスが必要です。

役に立つと思われる情報:

Java プリミティブ:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Flash の最上位クラス (すべての数値型も含まれます):

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/package-detail.html#classSummary (残念ながら、他の最上位クラスと一緒にリストされていますが、それほど多くはありません)本当に難しくするために)。

于 2012-08-30T19:11:44.213 に答える
0

アクション スクリプトでは、「Number」タイプを使用する必要があります。

var myNumber:番号; myNumber = Number.MAX

于 2012-08-30T15:21:00.740 に答える