2012-09-19 2 views
0

uint8_t 배열을 uint32_tNesC으로 변환하고 싶습니다.배열을 Nesc 문자열로 변환

아무도 내가 이것을 할 수있는 방법을 알고 있습니까?

+0

나는 NesC에 대해 아무 것도 모른다.하지만 소스 배열의 각 uint8_t는 대상에서 하나의'uint32_t'로 변환되어야합니까? 또는 소스의 4 개의 uint8_t를 대상의 단일 uint32_t에 결합해야합니까? –

+0

네, 이것이 생각입니다. C와 마찬가지로 정수 배열을 하나의 정수로 변환하려고합니다. –

+0

어쨌든 요아킴과 제 답변이 도움이된다는 의견에 대해 어떻게 생각하십니까? 혼란스러워. – unwind

답변

2

이 솔루션은 기능의 사용이다 내가 방어 적이기 사용 내 코드에서

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

하고 그것을 잘 작동합니다.

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는 네 개의 값이 있다고 가정합니다 : 당신이 배열이있는 경우

, 당신은 물론 루프에서이 작업을 수행 할 수 있습니다.

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

또한 기능이있다 : 내가 발견

+0

설명에 감사드립니다. 나는 나의 필요를 설명하기 위해 롱 단어를 사용했다. 이것은 나를 많이 도울 수 있습니다. 대단히 감사합니다. –

+1

@NounouNou 도움이 되었으면 투표를하고 /받습니다. – unwind

관련 문제