2010-11-19 58 views
0

我有以下代碼,轉換十進制。二進制(存儲爲一個int),並在C :: B運行良好:基本的二進制轉換在PIC上失敗

for(i=0;i<8;i++) 
    { 
    carry = start_value%2; 
    tab[bla] = carry; 
    bla++; 
    start_value = start_value/2; 
    } 

for(i=bla; i>0; i--) 
     { 
     binary = binary + tab[i]*pow(10,i); 
     } 

但是當我嘗試做同樣與MIKROC一個PIC18F4550,只不過沒有! 我已經包括'pow'並且尊重了我使用的變量的聲明。無論如何,輸出是錯誤的(例如-62053而不是110110)。

感謝您抽空看看到它:) 有一個愉快的一天

+0

您能否提供一個可變聲明的可編譯示例並顯示輸出如何完成? – philant 2010-11-19 16:29:09

+0

PIC上不同的sizeof(int)? – 2010-11-19 16:30:57

回答

0

你應該從i = bla - 1開始第二循環,因爲它是一個加比有二進制數字更多的時間。也可能是因爲tab[]未初始化爲0。

和第二環路應包括第一接頭元件:標籤[0]:

for(i = bla - 1; i >= 0; i--) 
{ 
    binary += tab[i] * pow(10, i); 
} 
0

檢查一個類型int的大小(sizeof(int))爲這個PIC架構。例如,如果int是16位,則它可容納的最大值是65535(對於unsigned int)或從-32768到32767(對於int)。可能問題在於,您正在計算的值對於您使用的類型來說太大了。

0

要從一個二進制數字的數組中獲得一個十進制值,必須將它們乘以2的適當冪,而不是10的數。假設pow()看起來像pow(base,exponent),你需要使用pow(2,i)。

0

jmpcm: int在我的PIC18F上是16位(2個字節)。 但問題是代碼在我的計算機上運行良好,但不在PIC上,而我使用的變量具有相同的大小。

philippe: 我有一種感覺,你可能是正確的桌子沒有被清除!儘管如此,仍然無法測試它。

Jeanne Pindar: 不,我需要在int中存儲需要交互的位數組(需要節省RAM空間),所以我們仍然在使用base10進行最終存儲。

所有: 我管理我的出路它與我定義的所有位的結構:

struct { 
unsigned int bit0: 1; 
unsigned int bit1: 1; 
... 

這樣我就可以1位存儲一組8位的,並把它作爲一個int在主要計算中並以Nx1矩陣進行訪問。

感謝您的幫助!

+0

這不是你的問題的答案。這應該作爲每個回覆的個人評論發佈。你也可以編輯你的問題。查看常見問題解答:http://stackoverflow.com/faq#howtoask – philant 2010-11-22 12:38:36