Java 如何从组合布尔值中获取十六进制值?

Java 如何从组合布尔值中获取十六进制值?,java,Java,我想从四个布尔变量中得到一个十六进制值,类似于以下示例: boolean[] m = {true, false, true, true}; 我想得到一个字符串或字符,它在二进制中包含B,意思是1011 PS:我正在开发Android应用程序。您可以使用以下逻辑: String x = ""; for(int i = 0 ; i < m.length ; i++){ if(m[i]) x += "1"; else x += "0"; } L

我想从四个布尔变量中得到一个十六进制值,类似于以下示例:

boolean[] m = {true, false, true, true};
我想得到一个字符串或字符,它在二进制中包含
B
,意思是
1011


PS:我正在开发Android应用程序。

您可以使用以下逻辑:

String x = ""; 
for(int i  = 0 ; i < m.length ; i++){
    if(m[i])
      x += "1";
    else
       x += "0";
 }

Log.i("values = ",x);
String x=”“;
对于(int i=0;i
您可以使用以下逻辑:

String x = ""; 
for(int i  = 0 ; i < m.length ; i++){
    if(m[i])
      x += "1";
    else
       x += "0";
 }

Log.i("values = ",x);
String x=”“;
对于(int i=0;i
您可以使用下面的代码获取二进制字符串、整数值和十六进制值

    boolean[] m = {true,false,true,true};
    String binaryStr = "";
    for (boolean bit : m) {
        binaryStr = binaryStr + ((bit) ? "1" : "0" );
    }
    int decimal = Integer.parseInt(binaryStr , 2);
    String hexStr = Integer.toString(decimal , 16);

在上面的代码中,
binaryStr
是您的二进制字符串,即
1011
,其等效的十进制和十六进制值是
decimal
hextstr

您可以使用下面的代码来获取二进制字符串、整数值和十六进制值

    boolean[] m = {true,false,true,true};
    String binaryStr = "";
    for (boolean bit : m) {
        binaryStr = binaryStr + ((bit) ? "1" : "0" );
    }
    int decimal = Integer.parseInt(binaryStr , 2);
    String hexStr = Integer.toString(decimal , 16);

在上面的代码中,
binaryStr
是您的二进制字符串,即
1011
,其等效的十进制和十六进制值是
decimal
hexStr
,对于每个布尔值,如果
Binary
字符串1
true
0,则使用
Integer.parseInt()
将二进制字符串转换为整数实例,最后使用
Integer.toHexString()
方法将整数转换为十六进制字符串

@org.junit.Test
public void test() throws Exception{

    boolean[] m = {true, false, true, true};
    String binary = "";

    for(boolean b : m) binary += b ? 1 : 0;

    String hex = Integer.toHexString(Integer.parseInt(binary, 2));

    System.out.println(hex);
}

对于每个布尔值,如果
true
0,则附加到
binary
string1,否则,则使用
Integer.parseInt()
将二进制字符串转换为整数实例,最后使用
Integer.tohextstring()方法将整数转换为十六进制字符串

@org.junit.Test
public void test() throws Exception{

    boolean[] m = {true, false, true, true};
    String binary = "";

    for(boolean b : m) binary += b ? 1 : 0;

    String hex = Integer.toHexString(Integer.parseInt(binary, 2));

    System.out.println(hex);
}
然后把二进制字符串转换成十六进制值


只需将二进制字符串转换为十六进制值即可

虽然上述答案确实有效,但它们有其局限性。由于32位整数限制,第一个限制是32布尔的上限。但是上面的代码也使用了内置的方法,它们不允许初学者掌握真正发生的事情

如果你只是想完成工作,就用上面的东西。这样可能会更有效率。我之所以发布这个解决方案,是因为我觉得它可以让那些想要掌握实际概念的人做得更好

(希望这些评论有点道理)

如果数组长度不是4的倍数,则需要将数组设置为4的倍数。我下面有一些代码可以做到这一点。它没有被评论,可能也没有那么有效,但它是有效的

public static boolean[] makeMultOf4(boolean[] arr){
    if(arr.length%4==0){return arr;}
    boolean[] array=new boolean[arr.length+(arr.length%4==1?3:arr.length%4==2?2:1)];
    for(int i=0;i<array.length;i++){
        try{
            array[i]=arr[i-(arr.length%4==1?3:arr.length%4==2?2:1)];
        }catch(Exception e){
            array[i]=false;
        }
    }
    return array;
}
publicstaticboolean[]makeMultOf4(boolean[]arr){
如果(arr.length%4==0){返回arr;}
布尔[]数组=新的布尔值[arr.length+(arr.length%4==1?3:arr.length%4==2?2:1)];

对于(int i=0;i虽然上述答案确实有效,但它们也有其局限性。由于32位整数的限制,第一个限制是32个布尔值的上限。但上述代码也使用内置方法,它们不允许初学者掌握实际情况

如果你只是想完成这项工作,使用上面的方法。可能会更有效率。我只是发布这个解决方案,因为我觉得它会让那些想要更好地掌握实际概念的人做得更好

(希望这些评论有点道理)

如果你的数组长度不是4的倍数,那么你需要将数组设置为4的倍数。我下面有一些代码可以做到这一点。没有注释,可能效率不高,但它可以工作

public static boolean[] makeMultOf4(boolean[] arr){
    if(arr.length%4==0){return arr;}
    boolean[] array=new boolean[arr.length+(arr.length%4==1?3:arr.length%4==2?2:1)];
    for(int i=0;i<array.length;i++){
        try{
            array[i]=arr[i-(arr.length%4==1?3:arr.length%4==2?2:1)];
        }catch(Exception e){
            array[i]=false;
        }
    }
    return array;
}
publicstaticboolean[]makeMultOf4(boolean[]arr){
如果(arr.length%4==0){返回arr;}
布尔[]数组=新的布尔值[arr.length+(arr.length%4==1?3:arr.length%4==2?2:1)];

对于(int i=0;我请详细解释你的问题。这是基本的Java编程;它不是特定于Android的。它与Android Studio无关,Android Studio只是Android的一个IDE。@S.L.Barth更正Studio。很多新手都这样做。非常烦人。请详细解释你的问题。这是基本的Java编程;没有具体说明c到Android。它与Android Studio无关,Android Studio只是Android的一个IDE。@S.L.Barth更正Studio。很多新手都这样做。非常烦人。请编辑更多信息。不鼓励只编写代码和“尝试此”答案,因为它们不包含可搜索的内容,也不解释为什么有人应该“尝试此”。请使用更多信息进行编辑。不鼓励使用“仅编码”和“尝试此”答案,因为它们不包含可搜索的内容,并且不解释为什么有人应该“尝试此”。