2012-09-27 40 views
0

我有3位數組中的24位數據a[0],a[1],a[2]需要計算乘以除以某些常數,結果仍然在3位數組中。Array對數組的算術

例如,data = 999900ha[0] = 99a[1] = 99a[2] = 00

[(999900h/64)*15000]/157286 << **process???** 

結果將是店3A97hb[0] = 00b[1] =3Ab[2] = 97

我的問題是

1)如何寫快速計算過程中的代碼,快速指針?如何在過程中使用指針?

2.)它可能不使用像數組整數和整數數組轉換過程?

+3

這功課嗎? –

+0

等等,所以你需要將每個數組中的每個元素合併爲一個整數,那麼什麼?除數,乘數或其餘部分來自哪裏? – slugonamission

+0

原始數據是定點Q24並存儲在char數組中,所以我必須轉換以實現數據。 –

回答

0

我想在這種情況下使用工會:

#inlude<stdint.h> 

union array_int { 
    char a[4]; 
    uint32_t num; 
} data = {.a = {00, 99, 99, 00}}; 

printf("%d", data.num); 

請把字節順序考慮。使用htonl如果你把你的字節最重要 - 最不重要,但是在一個小端系統上。如果你不想混淆endianess那麼我建議你使用建議的代數建議之一。

+0

這種我期待的方式。沒有將數組轉換爲整數。非常感謝 –

1

這是最簡單的 「解決方案」:

uint32_t data = 0x00999900; 

unsigned char const * a = (unsigned char const *)&data; 

現在你有a[0],...,a[3]。順序取決於系統的字節順序。


字節順序無關的解決方案工作代數:

uint32_t data = 0x3A97; 

unsigned char b[sizeof data] = { data >> 24 & 0xFF,  // b[0] 
           (data >> 16) & 0xFF,  // b[1] 
           (data >> 8) & 0xFF,  // b[2] 
            data  & 0xFF  // b[3] 
           }; 

您也可以重建與陣列的值。這裏的存儲方式依賴的方式:

uint32_t data; 
unsigned char * p = (unsigned char *)&data; 
p[0] = 0x00; 
p[0] = 0x99; 
p[0] = 0x99; 
p[0] = 0x00; 

// now "data" is 0x00999900 

而這裏的代數方法:

uint32_t data = a[0] * 256 * 256 * 256 + a[1] * 256 * 256 + a[2] * 256 + a[3]; 
+0

但我的原始數據是[0] = 0x99 a [1] = 0x99 a [2] = 0x00 因此,我必須先將uint32_t轉換爲右?如果我不轉換它有其他方式來做到這一點? –

+0

@memmo:更新! –