新手问题。
例如,假设我有十六进制数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;
谢谢
新手问题。
例如,假设我有十六进制数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;
谢谢
使用掩码0xff
来保留一个数字的8位,其他位将被移除:
unsigned int number = 0xABCDEF
unsigned int ef = number & 0xff;
unsigned int cd = (number>>8) & 0xff;
unsigned int ab = (number>>16) & 0xff;
unsigned int number = 0xABCDEF
unsigned int ef = number & 0xff;
unsigned int cd = (number >> 8) & 0xff;
unsigned int ab = (number >> 16) & 0xff;
与位与(&
)操作不同,您可能希望将ef
、cd
、ab
作为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);
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;
}
}
应该使用的掩码是0xFF
,而不是0x11
。除此之外,你说得对。
0x0011
在二进制中为0000000000010001
,所以该掩码只会给出两个位而非全部八个位。 - Some programmer dudea
是什么?你是不是指的是number
? - Alexey Frunze