【发布时间】:2011-04-24 17:51:04
【问题描述】:
我想将 4 个字符(4 个字节)存储到一个无符号整数中。
【问题讨论】:
标签: c bit-manipulation
我想将 4 个字符(4 个字节)存储到一个无符号整数中。
【问题讨论】:
标签: c bit-manipulation
您需要将每个 char 的位移过来,然后将它们组合到 int 中:
unsigned int final = 0;
final |= ( data[0] << 24 );
final |= ( data[1] << 16 );
final |= ( data[2] << 8 );
final |= ( data[3] );
这使用了一个字符数组,但无论数据如何输入,原理都是一样的。(我认为我的转变是正确的)
【讨论】:
char 关键字。
data 是一个 signed char 数组,|= 和 << 将无法正常工作。
char data[4] = {-12,57,33,-120}; main() { unsigned int final = 0; final |= ( data[0] << 24 ); final |= ( data[1] << 16 ); final |= ( data[2] << 8 ); final |= ( data[3] ); printf("%x\n", final); }。
另一种方法:
#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;
}
【讨论】:
越简单越好:
/*
** 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;
}
【讨论】:
你可以这样做(不是按位,但可能更容易):
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
如果你不先把它清空,你可能会得到另一个结果。
【讨论】: