我试图想出一种方法将一个字节分成两个(例如。F8
到F
和8
),以便稍后与其他字节重新组合。我读了点掩码,但我还是不太明白。这就是我想要做的事情。
F8 FF FF
- 将字节分成两部分。我将使用变量来区分字节
u=F
,v=8
,w=F
,x=F
,y=F
,z=F
,基本上是uv
,{ {1}},wx
最终结果为yz
或变量FF8 FFF
xuv
。
有谁知道怎么做?提前谢谢!
答案 0 :(得分:2)
如果变量x
的值已知为一个字节,则可以将其分成两个nibble,如下所示:
x_lo = x & 0xf;
x_hi = (x >> 4) & 0xf;
要将两个nibble s y_lo
和y_hi
合并为一个字节,您可以移动和/或:
y = y_lo | (y_hi << 4);
答案 1 :(得分:1)
如果您对逻辑运算符不太熟悉,我建议引入两个小帮助函数来封装这些东西:
void split_nibbles( unsigned char ch, unsigned char *higherOrder, unsighed char *lowerOrder )
{
*higherOrder = ch >> 4;
*lowerOrder = ch & 0x0f;
}
unsigned char merge_nibbles( unsigned char higherOrder, unsigned char lowerOrder )
{
return (higherOrder << 4) | (lowerOrder & 0x0f);
}
然后你可以写
unsigned char bytes[] = { 0xf8, 0xff, 0xff };
unsigned char u, v, w, x, y, z;
split_nibbles( bytes[0], &u, &v );
split_nibbles( bytes[1], &w, &x );
split_nibbles( bytes[2], &y, &z );
bytes[0] = merge_nibbles( x, u );
bytes[1] = merge_nibbles( v, y );
bytes[2] = merge_nibbles( z, w );
...这与您的描述非常接近。 : - )