将java中的二进制字符串转换回有符号整数
我使用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(
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位。