Java 如何读取十六进制值以及从起始位1.1开始到16位的部分值?

Java 如何读取十六进制值以及从起始位1.1开始到16位的部分值?,java,bit,hex,Java,Bit,Hex,我不熟悉java中的这种计算。这里我提出了一个任务,我将从CAN获取一个十六进制值,它包含CANId和一些参数值,如车轮转速、发动机转速、 如果我的CANId值为0xCFF0021,我会得到更多的数据,在这里,如果我从起始位1.1到长度为16位读取数据,我会得到基于车轮的车速。如何做到这一点,因为我可以理解读取十六进制值,但我不是从特定位获取值 import java.util.Scanner; public class NewClass { public static void main(

我不熟悉java中的这种计算。这里我提出了一个任务,我将从CAN获取一个十六进制值,它包含CANId和一些参数值,如车轮转速、发动机转速、

如果我的CANId值为
0xCFF0021
,我会得到更多的数据,在这里,如果我从起始位
1.1
到长度为16位读取数据,我会得到基于车轮的车速
。如何做到这一点,因为我可以理解读取十六进制值,但我不是从特定位获取值

import java.util.Scanner;

public class NewClass {

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    scan.nextInt(16);
    int[] input = new int[10];
    for (int i = 0; i < 10; i++) {
        //input[i] = scan.nextInt(16);
        //System.out.println(input[i]);
    }
}
import java.util.Scanner;
公共类新类{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
扫描:nextInt(16);
int[]输入=新的int[10];
对于(int i=0;i<10;i++){
//输入[i]=scan.nextInt(16);
//系统输出println(输入[i]);
}
}

}@Raghu我想这个问题已经被问到了。简单的答案是将十六进制字符串转换为字节,如我提供的链接所示。然后,您可以使用按位AND操作来屏蔽各个位位置。例如,要从右侧隔离第二位,可以用数字2屏蔽字节。为什么?

1111 0110 (value)
0000 0010 (mask)
---------
0000 0010 (isolated bit)

如果获取的值与掩码相同,则断言位位置(高),否则为低。在Java中,按位AND和OR运算符分别是“&”和“|”。

我不确定位的小数是多少(如起始位1.1)。你的意思是从第11位开始吗?@Jason不,它的意思是在canId之后开始第1位。谢谢你,但是隔离第2位或第3位是什么意思。?我在线程“main”java.lang.StringIndexOutOfBoundsException中得到异常
异常:字符串索引超出范围:7
如果我将其称为
byte[]b=Example.hextStringToByteArray(“0xCFF0021”)通过隔离,我的意思是,您得到的值仅针对该位或该位。另外,请尝试
byte[]b=Example.hexStringToByteArray(“CFF0021”)取而代之。请记住,“x”不是十六进制字符。