2011-06-24 10 views
2

VB.NETでは、基礎となるビット構造を維持しながら32ビット整数を取り出し、32ビット浮動小数点型にキャストする高速な方法はありますか? BitConverterはこれを行いますが、バイト配列を使わずに直接キャストしたいと思います。整数を1つの保存ビット表現にキャストする

+0

"基本的なビット構造を保存する"とは何を意味し、なぜそれが必要ですか? – Magnus

+1

私はボトルネックのパフォーマンスを改善するために[bit twiddling](http://graphics.stanford.edu/~seander/bithacks.html)を使用していますが、私はいくつかの機能のための最も速いビットハックを探しています。 – jnm2

答えて

2

くそ、私はおそらくCスタイルの連合を忘れることができますか?

<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Explicit)> _ 
Public Structure IntFloatUnion 
    <Runtime.InteropServices.FieldOffset(0)> Public i As Integer 
    <Runtime.InteropServices.FieldOffset(0)> Public f As Single 
End Structure 


Sub Main() 
    Dim u As IntFloatUnion 

    u.i = 42 
    Console.WriteLine(u.f) 

    Console.ReadLine() 
End Sub 

さて、どのようにhereを示したものと同様のC#でヘルパー関数を書くことについて:

public static class FancyConverter 
{ 
    public static unsafe float FloatFromBytes(int i) 
    { 
     return *((float*)(void*)(&i)); 
    } 
} 

これは、別のDLLにコンパイルし、VBプロジェクトから参照することができます。

+0

+1!それはクールでした。 – jnm2

関連する問題