分割一个十六进制数

8

新手问题。

例如,假设我有十六进制数0xABCDEF,如何将其拆分为0xAB、0xCD和0xEF? 是这样吗?

unsigned int number = 0xABCDEF
unsigned int ef = a & 0x000011;
unsigned int cd = (a>>8) & 0x000011;
unsigned int ab = (a>>16) & 0x000011;

谢谢


十六进制数0x0011在二进制中为0000000000010001,所以该掩码只会给出两个位而非全部八个位。 - Some programmer dude
a是什么?你是不是指的是number - Alexey Frunze
4个回答

16

使用掩码0xff来保留一个数字的8位,其他位将被移除:

unsigned int number = 0xABCDEF
unsigned int ef = number & 0xff;
unsigned int cd = (number>>8) & 0xff;
unsigned int ab = (number>>16) & 0xff;

4
unsigned int number = 0xABCDEF
unsigned int ef = number & 0xff;
unsigned int cd = (number >> 8) & 0xff;
unsigned int ab = (number >> 16) & 0xff;

与位与(&)操作不同,您可能希望将efcdab作为unsigned char类型,具体取决于您的其余代码以及如何使用这些变量。在这种情况下,您需要将其转换为unsigned char

unsigned int number = 0xABCDEF
unsigned char ef = (unsigned char) number;
unsigned char cd = (unsigned char) (number >> 8);
unsigned char ab = (unsigned char) (number >> 16);

0
void splitByte(unsigned char * split, unsigned int a,int quantBytes)
{
  unsigned char aux;
  int i;
  for(i=0;i<quantBytes;i++)
  {
      split[i]=a&0x00FF; 
      a=(a>>8);
  }
  for(i=0;i<quantBytes-1;i++)
  {
      aux = split[i];
      split[i] = split[quantBytes-i-1];
      split[quantBytes-i-1] = aux;

  }
}

在主函数中: unsigned char split[4]; splitByte(split, 0xffffffff, 4);

0

应该使用的掩码是0xFF,而不是0x11。除此之外,你说得对。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接