2012-09-19 249 views
0

我想將uint8_t的數組轉換爲uint32_tNesC將數組轉換爲字符串Nesc

有誰知道我該怎麼做?

+0

我對NesC一無所知,但是應該將源數組中的每個'uint8_t'都轉換爲目標中的一個'uint32_t'嗎?還是應該將源代碼中的四個'uint8_t'合併到目標中的單個'uint32_t'? –

+0

是的,這是主意。就像在C中一樣,我想將整數數組轉換爲一個整數。 –

+0

那麼,呃,你怎麼評論說,當Joachim和我的答案都有幫助時,他們做了*不同的事情*?混亂。 – unwind

回答

2

,我發現該解決方案是使用的功能:

void * memcpy (void * destination, const void * source, size_t num); 

還有一個功能:

void * memset (void * ptr, int value, size_t num); 

在我的代碼使用memcpy,它工作正常。感謝所有回答我的問題的人

0

如果您想將源中的單個uint8_t轉換爲目標中的單個uint32_t,那實際上非常簡單。只需創建目標數組,然後將值複製到一個循環中:

uint8_t *source; 
size_t source_count; /* Number of entries in the source */ 

uint32_t *dest = malloc(sizeof(*dest) * source_count); 
for (int i = 0; i < source_count; i++) 
    dest[i] = source[i]; 
+0

非常感謝。這很簡單:) –

0

您的標題提到了字符串,但您的問題文本沒有。這很混亂。

如果你有4個8位整數,你可以將它們合併成一個單一的32位像這樣:

const uint8_t a = 1, b = 2, c = 3, d = 4; 
const uint32_t big = (a << 24) | (b << 16) | (c << 8) | d; 

此預定他們像這樣,其中字母表示從上面的變量位:

0xaabbccdd 

換句話說,a被認爲是最重要的字節,並且d最少。

如果你有一個數組,你當然可以這樣做在一個循環:

uint32_t bytes_to_word(const uint8_t *bytes) 
{ 
    size_t i; 
    uint32_t out = 0; 

    for(i = 0; i < 4; ++i) 
    { 
    out <<= 8; 
    out |= bytes[i]; 
    } 
    return out; 
} 

上述假設bytes有四個值。

+0

感謝您的解釋。我用了一個很好的詞來解釋我的需要。這可以幫助我很多。非常感謝您 –

+1

@NounouNou如果這有幫助,請投票和/或接受。 – unwind