-3

私は取得U08* _bufferし、このパラメータを取得する関数に渡す必要がありますU16*:

関数シグネチャ:FunctionA(U16 offset, U16 * pInbuff)

次のように呼び出そうとしています:FunctionA(0, (U16*)(m->GetBuffer));

取得

warning C4244: 'argument' : conversion from 'U32' to 'U16', possible loss of data
error C2220: warning treated as error- no 'object' file generated.

キャストを正しくする方法を知っていますか?

4

3 に答える 3

0

U08 が符号なしバイトで U16 が符号なし 16 ビット ワードである整数型の場合、データをパディングすることで問題を解決できます。次のコードは、データをパディングし、バッファを符号なし 16 ビット値の配列として渡すことができるようにする必要があります。

int bufferSize;  // set this value with the actual buffer size
U16 wordBuffer= new U16[bufferSize];
U16 *wordBufferIndexer = wordBuffer;
U08 *byteBufferIndexer = byteBuffer;
for (int i = 0; i < bufferSize; ++i)
{
    wordBufferIndexer = *(byteBufferIndexer++);
}

FunctionA(0, wordBuffer);
于 2013-07-02T13:31:34.833 に答える
0
FunctionA(0, (U16*)(m->GetBuffer));

それはほぼ確実にあるはずです

FunctionA(0, (U16*)(m->GetBuffer()));

もちろん、getBufferが不適切な名前のポインターであり、関数ではない場合を除きます。

于 2013-07-02T13:08:40.210 に答える