Java 如何将带符号的十进制值转换为32位小尾端二进制字符串?

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

我需要将一个有符号的十进制数转换成一个32位的小尾端二进制值。有没有人知道可以实现这一点的内置Java类或函数?或者我们已经建造了一个这样做


数据是一个长纬度值,如-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);