2011-04-24 61 views

回答

5

,需要在每个字符的位上移,则或将它们组合成的INT:

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

使用字符数组,但它同样的道理,无论数据是如何在未来(我觉得我得到了转变右)

+0

我不会建议使用示例代码的'char'关键字C. – 2011-04-24 17:58:00

+0

哦,是的,那很糟糕。固定。 :) – ssube 2011-04-24 17:58:58

+0

如果'data'是一个'signed char'数组,'| ='和'<<'不会按照你的想法工作。 – 2011-04-24 18:01:00

0

你可以做这样的(未逐位,但也许更容易):

unsigned int a; 
char *c; 

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

或者,如果你想按位,你可以使用:

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

如果您不先将其空白,您可能会得到另一个结果。

+1

难道你不需要一个强制转换,它应该是c =(char *)&a吗? – 2011-04-24 18:04:41

+0

这将是可选的。我会添加它。谢谢 – Iustin 2011-04-24 18:07:26

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; 
} 
相关问题