2011-04-24 11 views

Respuesta

5

Usted necesidad de cambiar los bits de cada chamuscar con, a continuación, o combinarlos en el int:

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

que utiliza un conjunto de caracteres, pero es el mismo principio, no importa cómo los datos está llegando . (Creo que tengo los desplazamientos a la derecha)

+0

No se recomienda usar la palabra clave 'char' en el ejemplo de código en C –

+0

Oh, si, eso es malo Fijo. :) – ssube

+0

Si 'data' es un' signed char' array, '| =' y '<<' no funcionarán como lo desee. –

0

usted puede hacerlo de esta manera (no bit a bit, pero tal vez más fácil):

unsigned int a; 
char *c; 

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

O si desea bit a bit que puede utilizar:

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

Si no lo deja en blanco primero, es posible que obtenga otro resultado.

+1

¿No necesitarías un yeso, debería ser c = (char *) & a? –

+0

Eso sería opcional. Lo agregaré Gracias – Iustin

3

una forma más de hacer esto:

#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

más simple, su mejor:

/* 
** 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; 
} 
Cuestiones relacionadas