java bit操作_java位操作

在搞与c的协议解析的时候,要进行很多的位运算。因为位运算,实际编程中用的不多,这里还是记录一下。

c协议过来的数据是16进制的字符串。

首先是将16进制的字符串转换为ByteBuffer.

public staticByteBuffer string2Buffer(String source) {

ByteBuffer buffer= ByteBuffer.allocate(source.length() / 2);for (int idx = 0; idx < buffer.capacity(); idx++) {int byteValue = Integer.parseInt(source.substring(idx * 2, idx * 2 + 2), 16);

buffer.put((byte) byteValue);

}

buffer.position(0);returnbuffer;

}

然后从ByteBuffer中取byte数据。

int flag=0;

ByteBuffer buffer=NocHelper.string2Buffer(source);while (buffer.position()

flag=buffer.get() & 0x0FF;

}

这样算是绕了一圈,将16进制的字符转为了无符号10进制的数字。

因为每个字节中的每一位都代表着不同的信息。其中取一个字节中的高4位和低4位的时候。用到了右移和一个&运算。

右移动4位,就可以获取到高4位的数值。

与0x0f的&运算,相当于与 00001111进行&运算,0x0f相当于一个掩码,把高四位的都置为0,只保留低四位。

对字节中的某一位的状态进行判断时候,之前的做法也是采用掩码。如对xxxxx1xx这种格式数据,验证foo的低三位是否为1。对判断的数值进行操作时候,则 foo & Integer.parseInt("00000100",2)的结果进行判断,等于 00000100(4)则满足。

目前用到暂时这些,免得以后再给忘了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值