如何在C中将2字节整数转换为2个不同的字符?

时间:2013-02-19 05:20:09

标签: c

我想转换unsigned int并将其分成2个字符。例如:如果整数为1,则其二进制表示形式为0000 0001.我希望0000部分在一个char变量中,0001部分在另一个二进制变量中。我如何在C中实现这一目标?

6 个答案:

答案 0 :(得分:5)

如果您坚持要sizeof(int)==2,那么:

  unsigned int x = (unsigned int)2; //or any other value it happens to be
  unsigned char high = (unsigned char)(x>>8);
  unsigned char low  = x & 0xff;

如果总共有8位(一个字节),并且您将其分成两个4位值:

  unsigned char x=2;// or whatever
  unsigned char high = (x>>4);
  unsigned char low = x & 0xf;

答案 1 :(得分:3)

移动并屏蔽掉您想要的部分数字。无符号整数可能是四个字节,如果你想要所有四个字节,你只需要移动16和24来获得更高阶的字节。

unsigned char low  =  myuint       & 0xff;
unsigned char high = (myuint >> 8) & 0xff;

答案 2 :(得分:2)

假设16位整数用sizeof检查!!在我的平台上,int是32位,所以我将在这个代码示例中使用short。 Mine在拉开指针方面赢得了最令人厌恶的奖项 - 但它也是我最清楚的理解。

unsigned short number = 1;

unsigned char a;
a = *((unsigned char*)(&number)); // Grab char from first byte of the pointer to the int

unsigned char b;
b = *((unsigned char*)(&number) + 1); // Offset one byte from the pointer and grab second char

答案 3 :(得分:1)

一种有效的方法如下:

typedef union 
{
  unsigned char c[sizeof(int)];
  int           i;
} intchar__t;

intchar__t x;
x.i = 2;

现在x.c [](数组)将整数引用为一系列字符,尽管您将遇到字节字符串问题。可以使用适合您正在编程的平台的#define值来解决这些问题。这与Justin Meiners提供的答案类似,但有点清晰。

答案 4 :(得分:0)

unsigned short s = 0xFFEE;
unsigned char b1 = (s >> 8)&0xFF;
unsigned char b2 = (((s << 8)>> 8) & 0xFF);

最简单的我能想到。

答案 5 :(得分:0)

int i = 1  // 2 Byte integer value 0x0001
unsigned char byteLow = (i & 0x00FF); 
unsinged char byteHigh = ((i & 0xFF00) >> 8); 
byteLow中的

值为0x01 byteHigh中的值为0x00