これは float ではなく long int をエンコードしていると思います。特に、それはおそらく0x0000004c7dc814cc
ですが、そうかもしれません0x00000131f7205330
。
私の推理...
リンク先のコードを調べると、float に対してリモートで通常とは異なることが行われているようには見えませvalueOf
ん。標準の実装では、このようなことはまったくありません。
一方、文字列TH3IFMw
は base64 でエンコードされた文字列のように全世界を検索します。上位アルファ、下位アルファ、および数字を使用する一般的なエンコーディングは、他にあまり思いつきません。同じコードを調べると、base64 への参照が 1 つしか見つかりません... StreamWriter の 575 行目で、エンコーディングlong
インスタンスを処理します。これは、リンクされたコードの唯一の部分であり、観察した出力をリモートでも生成できるようです。
文字列のサイズを見ると...それがbase64であると仮定すると、末尾の=
パディング/アライメント文字が欠落していますが、base64の一部の実装では簡潔にするためにこれらを省略しています. それを追加して ( TH3IFMw=
)、base64 としてデコードすると、16 進値になります0x4c7dc814cc
。これはわずか 5 バイトのサイズで、少し奇妙です。ただし、これはおそらく float (4 バイト) または double (8 バイト) ではないことを意味します。
しかし、これは行 575 の long のエンコーディングに適合する可能性があります... Base64Utils.toBase64 のドキュメントを見ると、 「すべてのゼロビットの先頭グループが省略されている」という事実に言及しています。元の long が0x0000004c7dc814cc
.
しかし、ドキュメンテーションの文言はイライラするほどあいまいです (そして、私は現在、テストするための java+gwt を持っていません)。「すべてゼロビットの先頭グループ」は、すべてゼロであるソースバイトを省略していることを意味する可能性がありますが、エンコードされたbase64文字A
から先頭文字を省略していることを意味する場合もあります( base64で6ビットを表します)。その場合、実際の base64 文字列はであり、長い値にデコードされます。A
0
ATH3IFMw
0x00000131f7205330
あなたが入力として提供しているものにこれらの数字のいずれかが見つかれば、それはおそらく起こっていることです. そうでなければ... 私は困惑しています。