c语言怎么处理2进制位和1个字节的转换

比如对方发过来报文 我接受 解包 那个报文上有个字段 是1个字节 我用char定义 那个字段中包括3个信息 1bit 扩展位 1bit长度位 6bit tag标识位 正好8bit一个字节 但我不知道怎么解出这些bit位的值 解出来后最好转换成int判断处理 告诉我怎么实现 不知道怎么解,也不知道怎么转换

第1个回答  2014-12-01
int x = char a &0x3f 后6位
int y =char a &0x40
int z = char a&0x80追问

第1位 和0x80与 (10000000)
第2位 和0x40与 (01000000)
后6位 和0x3f与 (00111111)
是吧 好的 谢谢 那么问题来了刚才说的是解包解出值 但 我如果要拼起来 怎么拼成1个字节

第1位 和0x80与 (10000000)
第2位 和0x40与 (01000000)
后6位 和0x3f与 (00111111)
是吧 好的 谢谢 那么问题来了刚才说的是解包解出值 但 我如果要拼起来 怎么拼成1个字节

追答

把啥拼起来?把x y z拼成a吗?

x y z拼a,
a |=(z&0x1)<<7;z是最高一位的
a |=(y&0x1)<<6;
a |=(x&0x3f)

本回答被提问者采纳
第2个回答  2014-12-01
用位运算。
char bte1;

char extend = bte1 >> 7;
char length = (bte1 & 0x40) >> 6;
char mark = (bte1 & 0x3F) ;追问

移位操作是干嘛的啊

追答

你这个包用1bit 表长度的话,如果长度是1,char 的2进制是表示:00000001; 你要放到那一字节里的话它是要在bit6 上就该是01000000.

本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网