请问如何分离一个byte的前4位和后4位

SoulRed 2018-07-09 01:02:24
大家都知道一个byte 是8 bit
我想把这个byte 拆分成两个整数
前4bit 一个整数,后4bit一个整数。
该怎么做。
例如
byte b= 0x33;
如何将他的前4位和后4位拆分开?
请注意是位运算不是字节运算
...全文
878 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
维秀斯丢丢 2018-07-11
  • 打赏
  • 举报
回复
int front = (a & 0xF0) >> 4;//3
int trail = a & 0xF;//3
threenewbee 2018-07-10
  • 打赏
  • 举报
回复
a / 16 后4bit
a % 16 前 4bit
threenewbee 2018-07-09
  • 打赏
  • 举报
回复
a / 65536 后16bit
a % 65536 前 16bit
巴士上的邂逅 2018-07-09
  • 打赏
  • 举报
回复
            var a = Convert.ToString(0x33, 2).PadLeft(8, '0');
var b = Convert.ToInt32(a.Substring(0, 4));
var c = Convert.ToInt32(a.Substring(4));
wanghui0380 2018-07-09
  • 打赏
  • 举报
回复
0B11110000=0xF0

0B00001111=0xF
SoulRed 2018-07-09
  • 打赏
  • 举报
回复
我是这样做的

a1 = b & 0B11110000 >> 4;
a2= b & 0B00001111;

但是这个0B开头的语法只有C#7才支持。哈哈。我的语言版本太低
liulilittle 2018-07-09
  • 打赏
  • 举报
回复
byte n = 0x33;
byte high4bit = (byte)(n >> 4);
// byte high4bit = (byte)(n / 0x0F);

byte low4bit = (byte)(n & ((1 << 4) - 1));
// byte low4bit = (byte)(n & (0b100 - 0b0001));
// byte low4bit = (byte)(n & 0x0F);
// byte low4bit = (byte)(n & 0b1111);

Console.WriteLine("high4bit={0}, low4bit={1}", hight4bit, low4bit);
// echo high4bit=3, low4bit=3

上述为候选方法,楼主结贴给分把!

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧