2012-09-19 197 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