2009-03-28 32 views
0

すでにご存知のとおり、私はC#に移行しており、C++のいくつかのものは異なっています。C#でバイト配列にDwordをキャストする方法

C++コード

BYTE packetBuffer[32] = {0}; 
    *(LPWORD)(packetBuffer + 0) = 0xC; 
    *(LPWORD)(packetBuffer + 2) = 0x5000; 
    *(LPDWORD)(packetBuffer + 6) = dwArgs[13]; 
    *(LPDWORD)(packetBuffer + 10) = *(keyArray2 + 0); 
    *(LPDWORD)(packetBuffer + 14) = *(keyArray2 + 1); 

注dwArgsとkeyArray2 "はDWORDのアレイ"

であるこれは、[0]から0xC

  • packetbufferになり、それが

    1. packetbufferを置いていますどのように1]は0x00となる
    2. packetbuffer [2]は0x50となる
    3. packetbufferは、[3] C#でそれをする方法

      には0x00

    とそうでしょうか?

    私はこれを試してみましたが、それはあなたがバイト配列にしてからデータを変換するためにBitConverterを使用することができます

    packetBuffer[0] = 0xC; 
    packetBuffer[2] = (byte)0x5000; //error 
    packetBuffer[6] = (byte)dwArgs[13]; 
    
  • 答えて

    2

    を動作しません。残念ながら、既存の配列にコピーする機能はありません。私自身のEndianBitConverterが私のMiscUtil libraryであれば、必要に応じてこのことが可能になりますし、もちろん使用するエンディアンを指定することもできます。 (BitConverterは通常、.NETのリトルエンディアンです - あなたはIsLittleEndianフィールドでそれを確認することができます。)例えば

    EndianBitConverter converter = EndianBitConverter.Little; 
    converter.CopyBytes((short) 0xc, packetBuffer, 0); 
    converter.CopyBytes((int) 0x5000, packetBuffer, 2); 
    converter.CopyBytes(dwArgs[13], packetBuffer, 6); 
    

    などCopyBytesへの2回目の呼び出しでintへのキャストは、冗長であるが、明確にするために含まれています(前の行に注意してください)。

    EDIT:.NET標準ライブラリを使用する場合は、MemoryStreamBinaryWriterを使用することもできます。

    +0

    @ジョンスキート、ありがとう!あなたはこの仕事をすることができる場合はあなたの図書館をチェックすることができます)。また、どのように動作するの例は非常に高く評価されます。 –

    +0

    @ John:あなたがコメントしている間に編集していました:) –

    0

    できません。 C#は強く型付けされています。変数には1つの型しかありません。 reinterpret_castのようなトリッキーは許可されていません。

    あなたの問題にはいくつかのアプローチがあります。最初の、そして明らかなのは、ビルトインの直列化フレームワークを使用することです。必要がない限り、独自のシリアライゼーションコードを書くのは気にしないでください。そして、.NETでは、しばしば必要はありません。

    目は(バイト配列に変換するためのトリックを行う必要がありますGetBytesメソッド)BitConverterクラスを使用することです

    +0

    強く型付けされていても、整数型のようなプリミティブ型のビットとバイトを扱うことはできません。 CLR型システムにおける最も強力な制約は、参照型間のキャストです。 –

    +0

    @Cecil:いいえ、OPが求めるタイプの間に**キャスト**する方法はありません。任意の数の変換/シリアライゼーションクラスと関数を使用して、ソースオブジェクトの値に基づいて新しいオブジェクトを作成することはできますが、あるタイプのオブジェクトを取得することはできず、これはOPが求めている具体的なアプローチです。 – jalf

    関連する問題