1

エラーは次の行にあります:

dataArray[iLedMatrix][iRow] |=  (byte)(bufferPattern[iRow]) & (1<<7);

dataArrayは次のとおりです。bytedataArray[NUMBER_LED_MATRIX][NUMBER_ROW_PER_MATRIX];

bufferPatternは:const patternp * bufferPattern;

patternpは、次のタイプのtypedefです。typedefprog_uchar patternp [NUM_ROWS];

リファレンスで、prog_ucharが1バイト(0〜255)であることがわかります。だから私は精度を失うことについてのエラーを理解していませんか?何か案が?

4

3 に答える 3

5

問題はこのサブ式にあります

(byte)(bufferPattern[iRow])

変数bufferPatternはタイプでconst patternp *あるため、インデクサーが適用されると、結果はpatternpになります。タイプ「patternp」は、prog_uchar[]に対するtypedefです。つまり、実際にはこの表現は次のように言っています

prog_uchar*をバイトにキャストします

バイトはほぼ確実に1バイト値であり、prog_uchar *はプラットフォーム固有のポインタータイプ(4バイトまたは8バイト)です。これは確かに精度の低下につながります。おそらく、この値を参照解除するつもりでしたか?

(byte)(*(bufferPattern[iRow]))
于 2009-04-17T19:46:34.710 に答える
3

ポインタ型からバイトにキャストしようとしています。ポインタ型は通常4バイト(32ビットOS)または8バイト(64ビット)で表され、そのアドレス値を1バイトに変換しようとしています。

于 2009-04-17T19:45:14.947 に答える
0

bufferPattern[ iRow ]に解決されます。patternpこれはprog_uchar[ NUM_ROWS ]です。

つまり、実際には配列(ポインタとして実装されている)をバイトにキャストしているのです。意味がありません; 幸運なことに、コンパイラはあなたに警告しました!

于 2009-04-17T19:48:59.637 に答える