繁体   English   中英

将 double 转换为 byte[] 数组

[英]Convert double to byte[] array

如何在 Java 中将 double 转换为 byte 数组? 我看了很多其他帖子,但找不到正确的方法。

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

expected output (byte[]) = 006543

我可以不使用像 doubleToLongBits() 这样的函数吗?

doublebyte[]转换

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到 BCD 转换

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
ByteBuffer.allocate(8).putDouble(yourDouble).array()
public static byte[] encode(double input, int size, int precision) {
    double tempInput = input;

    for (int i = 0; i < precision; i++) tempInput *= 10;

    int output = (int) tempInput;

    String strOut = String.format("%0"+size+"d", output);

    return strOut.getBytes();
}
double doubleValue = 10.42123;
DecimalFormat df = new DecimalFormat("#.##");
String newDouble = df.format(doubleValue);
byte[] byteArray = (newDouble.replace(",", "")).getBytes();

for (byte b : byteArray) {
    System.out.println((char)b+"");
}

这是我根据你的输入得到的,它符合我的目的。 感谢您的帮助!

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;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM