public static int getIntFromBytes(byte high_h, byte high_l, byte low_h, byte low_l) {
return (high_h & 0xff) << 24 | (high_l & 0xff) << 16 | (low_h & 0xff) << 8 | low_l & 0xff;
1、字节比特的高低位为:从左到右,依次降低。
高————————>低
0101 0101 0000 1111 0101
2、’<<’:左移运算符,num << 1,相当于num乘以2;
‘>>’ : 右移运算符,num >> 1,相当于num除以2
‘>>>’: 无符号右移,忽略符号位,空位都以0补齐
3、<< 、 | 、()、三种运算符的优先级为’()’ > ‘<<’ > ‘|’
4、上面代码的实现过程其实就是,一个int整形数据在二进制形式下有32位数据,所以,将第一个byte数据high_h左移24位,作为最终int的最高8位。将第二个byte数据high_l左移16位,作为第23~16位……,然后在进行‘|’操作,形成最终的int整形数据。其实是形成4个int后再依次进行’|’操作。
public static int getIntFromBytes(byte high_h, byte high_l, byte low_h, byte low_l) { return (high_h & 0xff) << 24 | (high_l & 0xff) << 16 | (low_h & 0xff) << 8 | low_l & 0xff; }1、字节比特的高低位为
嗯。最近工程上遇到一个byte数组转换为int的问题,解决过程中遇到了几个坑,经过各种查资料终于还是解决了。撒花。
Java的位运算以及byte数组与其他类型数据的转换比c/c++感觉麻烦一些。这里简单说明一下byte数组和int的转换吧。
总所周知,int类型数据在Java中占据32 bit,byte占据8 bit,这样的话,正常情况下4个byte可以转换成一个int类型数据。
当然,不正
function BytesToIntLittleEndian(bytes){
var val = 0;
for (var i = bytes.length - 1; i >= 0; i--) {
val += bytes[i];
if (i != 0) {
val = val << 8;
return val;
//小端模..
la = 0XFFFFFF | (la << 24);
lb = 0XFF00FFFF | (lb << 16);
lc = 0XFFFF00FF | (lc << 8);
ld = 0XFFFFFF00 | ld;
return ...
byte abyte =-1;
System.out.println(abyte);
System.out.println(Integer.toBinaryString(abyte));
//取高四位
byte high = (byte) ((abyte>>4) & 0x0f);
System.out.println("取高...
public static String byteArrayToHex(byte[] bytes) {
BigInteger bigInt = new BigInteger(1, bytes);
String hex = bigInt.toString(16);
int paddingLength = (bytes.length * 2) - hex.length();
if (paddingLength > 0) {
return String.format("%0" + paddingLength + "d", 0) + hex;
} else {
return hex;
public static void main(String[] args) {
byte[] bytes = {0x12, 0x34, (byte) 0xAB, (byte) 0xCD};
String hex = byteArrayToHex(bytes);
System.out.println(hex);
以上代码执行的结果为:
1234abcd
CSDN-Ada助手:
基于RTMP协议的音视频传输----FLV格式
怕什么真理无穷:
Android应用监听来电、短信等方法
Android USB设备通信--读写操作
Coder.Chen+:
Android BLE 通信处理过程---串行通信
day_moon: