2013-03-26 789 views
0

我有一個函數可以對長度爲32的uint8_t的數組進行操作。我想給它傳遞一個長度爲16的uint16_t的數組,並且讓它對這個數組逐字節執行相同的操作。如何將uint16_t的數組轉換爲uint8_t的數組?

我試着這樣做:

uint8_t byteArray[32]; 
void function(uint16_t *inArray) 
{ 
    byteArray = (uint8_t *) inArray; 
    ... do the byte-by-byte operations on byteArray 
} 

,但我得到的錯誤:

incompatible types when assigning to type 'uint8_t[32]' from type 'uint8_t *'

有誰知道我做錯了嗎?

+1

我很確定'byteArray'是一個類型,但是由於您選擇不顯示它,所以它對我們來說仍然是一個謎。試試'uint8_t * byteArray = ....'。編輯:我看到它。它在代碼片段之上。該提案依然成立。 – WhozCraig 2013-03-26 18:21:24

回答

2
​​

您不能指定爲byteArray。它是一個數組,因此在C中不可修改。您可以使用指針,也可以重新考慮您正在執行的操作:本身的代碼是一種代碼味道,應該避免。

既然你提到你有一個函數對此進行操作,那麼讓函數接受一個參數比使用全局對象更好嗎?

+0

+1(就像你沒有看到那樣) – WhozCraig 2013-03-26 18:23:13

+0

不是數組已經只是指向第一個索引的指針嗎? – w1res 2013-03-26 18:24:39

+1

@ w1res不,它不是。指針和數組是完全不同的對象。恰巧在某些情況下,數組會將自身轉換爲指向第一個元素的指針。 – cnicutar 2013-03-26 18:25:04

1

數組是一個元素的集合,它不能像C中那樣被賦值(甚至更少的類型轉換)。你可以用一個循環元素來實現,或者重新思考你在做什麼來在任何地方使用相同的類型。

相關問題