Java 如何将带符号的十进制值转换为32位小尾端二进制字符串?
我需要将一个有符号的十进制数转换成一个32位的小尾端二进制值。有没有人知道可以实现这一点的内置Java类或函数?或者我们已经建造了一个这样做Java 如何将带符号的十进制值转换为32位小尾端二进制字符串?,java,binary,Java,Binary,我需要将一个有符号的十进制数转换成一个32位的小尾端二进制值。有没有人知道可以实现这一点的内置Java类或函数?或者我们已经建造了一个这样做 数据是一个长纬度值,如-78.3829。谢谢您的帮助。如果有帮助的话,下面是我制作的一个类,它将long转换为二进制字符串,并将二进制字符串转换为long: public class toBinary { public static void main(String[] args) { System.out.println(dec
数据是一个长纬度值,如-78.3829。谢谢您的帮助。如果有帮助的话,下面是我制作的一个类,它将long转换为二进制字符串,并将二进制字符串转换为long:
public class toBinary {
public static void main(String[] args) {
System.out.println(decimalToBinary(16317));
System.out.println(binaryToDecimal("11111111111111111111111111111111111100101001"));
}
public static long binaryToDecimal(String bin) {
long result = 0;
int len = bin.length();
for(int i = 0; i < len; i++) {
result += Integer.parseInt(bin.charAt(i) + "") * Math.pow(2, len - i - 1);
}
return result;
}
public static String decimalToBinary(long num) {
String result = "";
while(true) {
result += num % 2;
if(num < 2)
break;
num = num / 2;
}
for(int i = result.length(); i < 32; i++)
result += "0";
result = reverse(result);
result = toLittleEndian(result);
return result;
}
public static String toLittleEndian(String str) {
String result = "";
result += str.substring(24);
result += str.substring(16, 24);
result += str.substring(8, 16);
result += str.substring(0, 8);
return result;
}
public static String reverse(String str) {
String result = "";
for(int i = str.length() - 1; i >= 0; i--)
result += str.charAt(i);
return result;
}
}
公共类toBinary{
公共静态void main(字符串[]args){
系统输出打印LN(十进制二进制(16317));
System.out.println(二进制数字(“11111111111111111100101001”);
}
公共静态long binaryToDecimal(字符串bin){
长结果=0;
int len=bin.length();
对于(int i=0;i=0;i--)
结果+=str.charAt(i);
返回结果;
}
}
它不接受十进制值,但它可能会给您一些指导。一旦您知道endianess在二进制级别上的含义,转换就很简单了。问题更多的是你到底想用它做什么
public static int flipEndianess(int i) {
return (i >>> 24) | // shift byte 3 to byte 0
((i >> 8) & 0xFF00) | // shift byte 2 to byte 1
(i << 24) | // shift byte 0 to byte 3
((i & 0xFF00) << 8); // shift byte 1 to byte 2
}
(对于big-endian,您只需从下到上排序行…如何进行转换?圆形的将其转换为32位十进制并假装为整数?其他格式?比如:
四舍五入(-78.3829*100000)
,然后转换成32位小尾端二进制。那么你有什么问题?似乎很好。十进制是返回小的endian值还是大的endian值?我需要一点endian值。如果它返回一个大端值,那么在不运行reverse函数的情况下返回结果是否会将其作为小端值返回?我只是编辑了它,使其返回一个小端值。但是,如果不使用reverse函数返回结果,则不会将其作为一个小的endian值返回(与我之前的一样),因为endian ness是按字节而不是按位返回的。谢谢。我在二进制代码方面总是有问题。我正在转换的值是经度和纬度坐标。纬度值始终为正值,但经度值始终为负值,因为它位于有限的地理区域内。代码仅为经度值返回一个0。num<2
导致它在一次迭代后中断
。我不想麻烦你,但你不会碰巧知道如何将负数long
转换成二进制,是吗?要将负数long
转换成二进制,你只需将数字的绝对值转换成二进制,将所有的1转换成0,将0转换成1,然后在结果中加一,你得到了一个负二进制数。我现在没有时间编写代码(我正在工作),但真正具有挑战性的部分是实现1的添加。我觉得我已经给了你足够的时间让你自己去解决这个问题。如果我理解你的问题,你应该把零加到正二进制字符串中,然后翻转位,再加1。有道理?
// write int to stream so bytes are little endian in the stream
// OutputStream out = ...
out.write(i);
out.write(i >> 8);
out.write(i >> 16);
out.write(i >> 24);