2016-05-30 8 views
-1

年前にVBプログラムを作成しました。 Javaを学ぶために、Javaで書き直しました。私は変換したいアーカイブデータを持っているので、Javaプログラムで読むことができます。Visual Basicの単一データ型(Java)

私はデータ型の表現を研究していくつかの変換を把握してきましたが、主に私のJavaの新しさとVBからの時間のためにレンガの壁にぶつかりました。

フィールドがVBで単一であり、69.7(内部ではx'66668A42 'と表されています)私の人生にとって、私はこの内部表現を理解することはできません。 Javaは(ダブル)理解できる?

答えて

0

0x66668A42がfloat値69.2

そのおそらくリトルエンディアンのリトルエンディアン表記であるネイティブのx86形式のthatsので。コントラストJavaであっても、ビッグエンディアンとしてすべてを定義します基盤プラットフォームはありません。

だからあなたのVBのシングルが浮かぶようにint型を変換、その後、あなたは逆順にバイトをシャッフルする必要がJavaのfloat型に変換するには:

public class L2BFloat { 

    public static void main(String[] argv) { 
     int x = 0x66668A42; 
     System.out.println(little2Big2Float(x)); 
    } 

    public static float little2Big2Float(int little) { 
     // int endian conversion 
     int big = (little & 0x000000FF) << 24 
       | (little & 0x0000FF00) << 8 
       | (little & 0x00FF0000) >>> 8 
       | (little & 0xFF000000) >>> 24; 
     // convert to float 
     return Float.intBitsToFloat(big); 
    } 

} 
+0

私はそのエンディアンのものについて読んますが、理解していませんでした。私はあなたのソリューションを理解していませんが、それは動作します。私は少し研究をしたらそれを理解するでしょう。 –