2011-04-24 2 views

답변

5

당신은 다음에 대한 각 문자의 비트를 이동 OR을 INT로 결합해야합니다 문자의 배열을 사용하지만 상관없이 데이터가오고 어떻게 같은 원리 없습니다

unsigned int final = 0; 
final |= (data[0] << 24); 
final |= (data[1] << 16); 
final |= (data[2] << 8); 
final |= (data[3]  ); 

.

unsigned int a; 
char *c; 

c = (char *)&a; 
c[0] = 'w'; 
c[1] = 'o'; 
c[2] = 'r'; 
c[3] = 'd'; 

을 아니면 비트 단위 원하는 경우 사용할 수 있습니다

+0

내가 C. –

+0

오 예 코드에서'char' 키워드를 사용하는 것이 좋습니다 않을 것이다, 그래, 나쁘다. 결정된. :) – ssube

+0

'data'가'signed char' 배열 인 경우,'| ='와'<<'는 당신이 원하는대로 작동하지 않을 것입니다. –

0

당신은 이런 식으로 그것을 할 수 (비트 단위,하지만 어쩌면 더 쉬운 일이 아닙니다) (내가 바로 변화를 가지고 생각)

unsigned int a; 
a &= ~(0xff << 24); // blank it 
a |= ('w' << 24); // set it 
// repeat with 16, 8, 0 

먼저 비워 두지 않으면 다른 결과가 발생할 수 있습니다. 이 작업을 수행하는

+1

캐스팅이 필요하지 않습니까? c = (char *) & a? –

+0

선택 사항입니다. 나는 그것을 추가 할 것이다. 감사 – Iustin

3

또 하나의 방법 :

간단한
#include <stdio.h> 
union int_chars { 
    int a; 
    char b[4]; 
}; 
int main (int argc, char const* argv[]) 
{ 
    union int_chars c; 
    c.a = 10; 
    c.b[0] = 1; 
    c.b[1] = 2; 
    c.b[2] = 3; 
    c.b[3] = 4; 
    return 0; 
} 
0

더, 그것의 더 나은 :

/* 
** Made by CHEVALLIER Bastien 
** Prep'ETNA Promo 2019 
*/ 

#include <stdio.h> 

int main() 
{ 
    int i; 
    int x; 
    char e = 'E'; 
    char t = 'T'; 
    char n = 'N'; 
    char a = 'A'; 

    ((char *)&x)[0] = e; 
    ((char *)&x)[1] = t; 
    ((char *)&x)[2] = n; 
    ((char *)&x)[3] = a; 

    for (i = 0; i < 4; i++) 
    printf("%c\n", ((char *)&x)[i]); 
    return 0; 
} 
관련 문제