0

私の問題は、DWORD型の動的メモリの配列をBYTEに変換しようとしています。これをループして、エントリごとにDWORDをBYTEに変換できます。

しかし、これを行うためのより速い方法はありますか?DWORDデータへのポインターを取得し、データ全体をBYTEデータへのポインターに変換するには?memcpy操作を使用するなど?

私は両方のアプローチをテストしようとしましたが、2番目のソリューションで解決策にたどり着くことができなかったため、これは不可能だと感じています。

ご入力いただきありがとうございます。また、正しい方向への回答はありません。これは宿題の質問でもありません、私はそれが言及されなければならないと感じました。

4

4 に答える 4

5

それは、最終的に達成しようとしていることに大きく依存します。あなたが持っている場合、例えば:

DWORD *x;
x = new DWORD[100];

// x gets filled in somehow

そして、各DWORDの各バイトを個別に処理したいだけで、提案したようなことをする(つまり、memcpyを使用する)ことがオプションになる可能性があります。ただし、reinterpret_cast などを使用して、配列を BYTE 配列として扱うこともできます。

BYTE *y = reinterpret_cast<BYTE *>(x);

またはそのようなもの。

于 2012-09-28T15:31:01.513 に答える
1

エンディアンを気にしない場合は、おそらくバイトオーダーを交換することができstatic_cast<BYTE*>(array_ptr)ます(リトルエンディアンを使用している場合)。エンディアンを気にする場合は、事前にバイトスワップを考慮して実行する必要があります(バイトスワッピング用のx86 組み込み)。

コピーが必要な場合は、十分なスペースを割り当てmemcpyて、エンディアンの修正で a または copy ループを実行します。

于 2012-09-28T15:28:52.217 に答える
0
DWORD array[10];
BYTE* byteArray = array;
byteArray[0] ....

このような?

于 2012-09-28T15:28:00.487 に答える
-1

DWORD と BYTE が同じ長さの場合、はい。それ以外の場合は、各要素のサイズを個別に変更する必要があります。

于 2012-09-28T15:28:07.937 に答える