2009-04-17 68 views
1

該錯誤是在這一行:錯誤:從'const prog_uchar *'轉換爲'字節'失去精度?

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

dataArray中是:字節dataArray中[NUMBER_LED_MATRIX] [NUMBER_ROW_PER_MATRIX];

bufferPattern is:const patternp * bufferPattern;

patternp是typedef類型:typedef prog_uchar patternp [NUM_ROWS];

我可以在參考文獻中看到prog_uchar是1個字節(0到255)。所以我不明白失去精度的錯誤?任何想法?

回答

5

的問題是在該子表達

(byte)(bufferPattern[iRow]) 

可變bufferPattern是const patternp *類型的,所以當施加索引結果是patternp。類型「patternp」是typedef到prog_uchar []。所以實際上該表達式是說

Cast a prog_uchar* to a byte

字節幾乎可以肯定是單個字節值和prog_uchar *是平臺特定的指針類型(4或8個字節)。這確實會導致精度的損失。也許你打算取消這個價值?

(byte)(*(bufferPattern[iRow])) 
+0

您遇到了問題和正確的解決方案。 Thx,我的C有點生疏,我需要醒來! Thx – 2009-04-17 19:48:54

3

您試圖從指針類型轉換爲字節。指針類型通常用4個字節(32位OS)或8個字節(64位)表示,並且您試圖將其地址值轉換爲1個字節。

+0

謝謝,不能接受,因爲你是對的理由,但賈裏得到了原因和解決方案。 – 2009-04-17 19:49:42

0

bufferPattern[ iRow ]解析爲一個patternp,這是一個prog_uchar[ NUM_ROWS ]

所以你實際上將一個數組(實現爲一個指針)轉換爲一個字節。沒有意義;編譯器警告你!