Java 将double转换为byte[]数组

Java 将double转换为byte[]数组,java,double,bytearray,Java,Double,Bytearray,如何在Java中将双字节数组转换为字节数组?我看了很多其他的帖子,但是没有找到正确的方法 Input = 65.43 byte[] size = 6 precision = 2 (this might change based on input) expected output (byte[]) = 006543 我可以不用doubleToLongBits()之类的函数吗?公共静态字节[]编码(双输入,整数大小,整数精度){ 双输入=输入; 对于(inti=0;i

如何在Java中将双字节数组转换为字节数组?我看了很多其他的帖子,但是没有找到正确的方法

Input = 65.43 
byte[] size = 6
precision = 2   (this might change based on input)

expected output (byte[]) = 006543
我可以不用doubleToLongBits()之类的函数吗?

公共静态字节[]编码(双输入,整数大小,整数精度){
双输入=输入;
对于(inti=0;i
Real
double
字节[]
转换

double d = 65.43;
byte[] output = new byte[8];
long lng = Double.doubleToLongBits(d);
for(int i = 0; i < 8; i++) output[i] = (byte)((lng >> ((7 - i) * 8)) & 0xff);
//output in hex would be 40,50,5b,85,1e,b8,51,ec
double d = 65.43;
byte[b] output = new byte[OUTPUT_LENGTH];
String inputString = Double.toString(d);
inputString = inputString.substring(0, inputString.indexOf(".") + PRECISION);
inputString = inputString.replaceAll(".", "");
if(inputString.length() > OUTPUT_LENGTH) throw new DoubleValueTooLongException();
for(int i = inputString.length() - 1; i >= 0; i--) output[i] = (byte)inputString.charAt(i)
//output in decimal would be 0,0,0,0,6,5,4,3 for PRECISION=2, OUTPUT_LENGTH=8

这是我根据你们的意见得到的,符合我的目的。谢谢你的帮助

static int formatDoubleToAscii(double d, int bytesToUse, int minPrecision, byte in[], int startPos) {

        int d1 = (int)(d * Math.pow(10, minPrecision));

        String t = String.format("%0"+bytesToUse+"d", d1).toString();
        System.out.println("d1 = "+ d1 + " t="+ t + " t.length=" + t.length());

        for(int i=0 ; i<t.length() ; i++, startPos++) {
            System.out.println(t.charAt(i));
            in[startPos] = (byte) t.charAt(i);
        }           

        return startPos;
    }
静态int-formatDoubleToAscii(双d,int-bytesToUse,int-minPrecision,字节在[],int-startPos){
intd1=(int)(d*Math.pow(10,minPrecision));
String t=String.format(“%0”+bytesToUse+“d”,d1).toString();
System.out.println(“d1=“+d1+”t=“+t+”t.length=“+t.length());

对于(int i=0;i您是否正在尝试创建二进制编码的十进制?这就是您的输出,但问题不太清楚。不完全是,我希望删除小数点。如果我输入9999.1234,我的输出应该是999912。第二个是您要求的,第一个是我在您的评论之前开始键入的,我想包括在内不管怎样。干得好,我想第一件事是大部分13602观众看到的。意大利语言环境…所以,作为十进制符号的完美,但我会添加一个参数来指示语言环境,以避免出现问题,或者。在输入的十进制部分是的,但别忘了用不同的函数来完成这项工作。Th我给你的函数接受一个double作为输入,而不是字符串…使用
NumberFormat format=NumberFormat.getInstance(Locale.FRANCE))
例如,如果你得到的是逗号而不是句点作为输入。(然后使用
format.parse(inputString.doubleValue();
)不要忘记检查这个答案:)
double d = 65.43;
byte[b] output = new byte[OUTPUT_LENGTH];
String inputString = Double.toString(d);
inputString = inputString.substring(0, inputString.indexOf(".") + PRECISION);
inputString = inputString.replaceAll(".", "");
if(inputString.length() > OUTPUT_LENGTH) throw new DoubleValueTooLongException();
for(int i = inputString.length() - 1; i >= 0; i--) output[i] = (byte)inputString.charAt(i)
//output in decimal would be 0,0,0,0,6,5,4,3 for PRECISION=2, OUTPUT_LENGTH=8
static int formatDoubleToAscii(double d, int bytesToUse, int minPrecision, byte in[], int startPos) {

        int d1 = (int)(d * Math.pow(10, minPrecision));

        String t = String.format("%0"+bytesToUse+"d", d1).toString();
        System.out.println("d1 = "+ d1 + " t="+ t + " t.length=" + t.length());

        for(int i=0 ; i<t.length() ; i++, startPos++) {
            System.out.println(t.charAt(i));
            in[startPos] = (byte) t.charAt(i);
        }           

        return startPos;
    }
ByteBuffer.allocate(8).putDouble(yourDouble).array()