将java中的二进制字符串转换回有符号整数

将java中的二进制字符串转换回有符号整数,java,binary,parseint,radix,Java,Binary,Parseint,Radix,我使用java内置的Integer.toBinaryString(myInt)将其转换为二进制字符串,然后将该32位字符串转换为8位字符串 我的问题在于,当将数字转换回有符号整数时,我丢失了符号 //Converts an integer to n-bit binary. public static String convertToNBitBinary(int myNum, int nBitSigned){ int nBitUnsigned = nBitSigned -1; if(

我使用java内置的
Integer.toBinaryString(myInt)
将其转换为二进制字符串,然后将该32位字符串转换为8位字符串

我的问题在于,当将数字转换回有符号整数时,我丢失了符号

//Converts an integer to n-bit binary.
public static String convertToNBitBinary(int myNum, int nBitSigned){
   int nBitUnsigned = nBitSigned -1;

   if(myNum > Math.pow(2,nBitUnsigned) || myNum <= -Math.pow(2,nBitUnsigned) ){
      return "OutOfBound";
   }

   String intToConv = Integer.toBinaryString(Math.abs(myNum));

   //the number is less than nBitUnsigned
   if(intToConv.length()<nBitUnsigned){
      String append="";
      for(int i = nBitUnsigned - intToConv.length(); i>0;i--){
         append += "0";
      }
      intToConv = append + intToConv;
   }else { //the number is more than 8 bits
      intToConv = intToConv.substring(intToConv.length() - nBitUnsigned);
   }
   intToConv = (myNum <0?"1":"0") + intToConv;
   return intToConv;
}
例如:

我的Int=-5

二进制表示法=11111 011

转换回整数:251

我的一些代码:

//Converts an integer to 8-bit binary.
public static String convertTo8BitBinary(int myNum){
    String intToConv = Integer.toBinaryString(myNum);
    //the number is less than 8-bits
    if(intToConv.length()<8){
        String append="";
        for(int i = 8 - intToConv.length(); i>0;i--){
            append += "0";
        }
        intToConv = append+intToConv;
    //the number is more than 8 bits
    }else {
        intToConv = intToConv.substring(intToConv.length() - 8, intToConv.length());
    }
    return intToConv;
}

//Converts an 8-bit binary string to an integer.
public static int convertToIntegerFromBinary(String b){
    return Integer.parseInt(b,2);
}
//将整数转换为8位二进制。
公共静态字符串convertTo8BitBinary(int myNum){
字符串intToConv=Integer.toBinaryString(myNum);
//该数字小于8位
if(intToConv.length()0;i--){
追加+=“0”;
}
intToConv=追加+intToConv;
//数字大于8位
}否则{
intToConv=intToConv.substring(intToConv.length()-8,intToConv.length());
}
返回intToConv;
}
//将8位二进制字符串转换为整数。
公共静态int convertToIntegerFromBinary(字符串b){
返回整数.parseInt(b,2);
}

你知道我怎样才能保留这个标志吗?Integer.parseInt(b,2)对有符号整数不起作用吗?在表示单个整数的情况下,是否有一个对有符号二进制(

< p>)有效的基数,基本的机器体系结构会考虑符号的最高位。当最高位设置为“1”时,则为负数,否则为正数,更准确的整数而不是数字。在您的情况下,您将考虑32位中的至少8位。但符号位出现在第32位,因此失去了符号

您可以按如下方式执行位和操作: 我的32位密码&将其转换为int(1000 0000 0000 1111 1111)
将为您提供所需的8位数字

您应该管理作为符号标记的最高有效位

//Converts an integer to n-bit binary.
public static String convertToNBitBinary(int myNum, int nBitSigned){
   int nBitUnsigned = nBitSigned -1;

   if(myNum > Math.pow(2,nBitUnsigned) || myNum <= -Math.pow(2,nBitUnsigned) ){
      return "OutOfBound";
   }

   String intToConv = Integer.toBinaryString(Math.abs(myNum));

   //the number is less than nBitUnsigned
   if(intToConv.length()<nBitUnsigned){
      String append="";
      for(int i = nBitUnsigned - intToConv.length(); i>0;i--){
         append += "0";
      }
      intToConv = append + intToConv;
   }else { //the number is more than 8 bits
      intToConv = intToConv.substring(intToConv.length() - nBitUnsigned);
   }
   intToConv = (myNum <0?"1":"0") + intToConv;
   return intToConv;
}
下面的代码与您所做的完全相同,但使用(N-1)位(对于8位字符串,N=8),然后在结果字符串的开头追加
0
1
,以保留符号

//Converts an integer to n-bit binary.
public static String convertToNBitBinary(int myNum, int nBitSigned){
   int nBitUnsigned = nBitSigned -1;

   if(myNum > Math.pow(2,nBitUnsigned) || myNum <= -Math.pow(2,nBitUnsigned) ){
      return "OutOfBound";
   }

   String intToConv = Integer.toBinaryString(Math.abs(myNum));

   //the number is less than nBitUnsigned
   if(intToConv.length()<nBitUnsigned){
      String append="";
      for(int i = nBitUnsigned - intToConv.length(); i>0;i--){
         append += "0";
      }
      intToConv = append + intToConv;
   }else { //the number is more than 8 bits
      intToConv = intToConv.substring(intToConv.length() - nBitUnsigned);
   }
   intToConv = (myNum <0?"1":"0") + intToConv;
   return intToConv;
}

这个问题怎么样?没有第八个位是符号的方法吗?而不是整数,使用字节(APT为8位整数),只考虑7位。将第8位(MSB最高有效位)设置为前一个数字的符号,即第32位。