質問

vb.netでバイト配列(長さ4)を整数に変換する最良の方法は何でしょうか?私はBitConverterを知っていますが、4バイトのメモリをコピーすることで実行できるはずの何かを行うために関数呼び出しを行うのは非常に無駄のようです。同じ行に沿って、シングル/ダブルをバイナリ表現からシングル/ダブル変数に変換することについてはどうでしょうか。

役に立ちましたか?

解決

"メモリのバイトをコピーする" .NETは特に適していません(VB.NETはそれほど適していません)。そのため、Cへの切り替えがオプションでない限り、関数呼び出しはほとんど避けられません。

BitConverterは、よく考えられたテスト済みの関数です。もちろん、(C#で)次のようなことを行うことで回避できます:

myInt = (*pbyte) | (*(pbyte + 1) << 8)  | (*(pbyte + 2) << 16) | (*(pbyte + 3) << 24);

(偶然、バイト配列を整数に変換するときにBitConverterが行うことは exactly です。)

ただし、このコード:

  • BitConverterに相当するものよりもはるかに読みやすく、理解しにくい。
  • BitConverterが行うエラーチェックは一切行いません。
  • BitConverterのように、リトルエンディアンとビッグエンディアンの表現を区別しません。

つまり、「保存」することができます;関数呼び出しですが、最終的には大幅に悪化します(バグを導入しないと仮定しても)。一般に、.NET Frameworkは非常によく設計されており、実際の(パフォーマンス)問題が発生しない限り、その機能の使用について二度と考えるべきではありません。

他のヒント

  

BitConverterは知っていますが、   するのはかなり無駄のようです   何かをするための関数呼び出し   4をコピーすることでできるはずです   メモリのバイト。

私は状況を「私が望むことを正確に実行するメソッド呼び出しが既にあるときに、これを行う効率的な方法を手作業でコーディングしようとするとかなり無駄に思えます」

このコードの正確な部分にパフォーマンスのボトルネックがあることを絶対に確信している場合を除き、フレームワークが提供する機能を使用してください。

mdbは正確ですが、とにかくvbバイト配列をリトルエンディアン整数に変換するコードがあります...(独自のビットコンバータークラスを作成する場合に備えて)

'ここで、bits()は長さ4のバイト配列です

Dim i as Integer 

i = (((bits(0) Or (bits(1) << 8)) Or (bits(2) << &H10)) Or (bits(3) << &H18))

System.Bufferクラスを使用して、byte []からint []へのコピーをブロックできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top