将4个不同的整数转换为设置长度的字节数组

时间:2015-01-02 03:35:49

标签: java arrays

我正在尝试从文本文件转换4个整数并转换并将它们分配到26个字节的字节数组中。

实施例。文本文件包含数字1 8 113 4,这四个整数将连续放置在此精确序列中:

001 01000 0001110001 00000100

进一步重申我想设置4个字节并将int放入,所以不要像这样输出2

10

我希望它像

0010

编辑:基本上对于上面的例子,我只想要4个不同的字节数组,其长度设置为3,5等,并希望在每个数组中插入一个int。很抱歉让它变得混乱。

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你可以先编写一个函数来填充带有前导字符的String。像

这样的东西
public static String padString(String in, char padChar, int length) {
    StringBuilder sb = new StringBuilder(length);
    sb.append(in);
    for (int i = in.length(); i < length; i++) {
        sb.insert(0, padChar);
    }
    return sb.toString();
}

然后你可以拨打Integer.toBinaryString(int)并将结果传递给padString,如

public static void main(String[] args) {
    System.out.println(padString(Integer.toBinaryString(2), '0', 4));
}

输出(按要求)

0010

答案 1 :(得分:0)

使用填充,您可以实现以下内容。 String.format("%0{n}d", number)在这里不起作用,因为bitstring不是一个整数,你只能在字符串前加/后加空格。

输出

0000001
0001000
1110001
0000100

代码

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        int[] values = { 1, 8, 113, 4 };
        int width = -getMaxWidth(values);

        for (int value : values) {
            System.out.println(prettyPrintBitString(value, width));
        }
    }

    public static String prettyPrintBitString(int value, int padding) {
        return pad(Integer.toBinaryString(value), '0', padding);
    }

    public static int getMaxWidth(int[] values) {
        return numberOfBits(Collections.max(toList(values)));
    }

    public static int numberOfBits(int value) {
        return (int) (Math.floor(Math.log(value) / Math.log(2)) + 1);
    }

    public static List<Integer> toList(int[] values) {
        List<Integer> list = new ArrayList<Integer>();
        for (int value : values) list.add(value);
        return list;
    }

    public static String pad(String str, char token, int count) {
        StringBuilder padded = new StringBuilder(str);
        if (count < 0) {
            while (padded.length() < -count) padded.insert(0, token);
        } else if (count > 0) {
            while (padded.length() < count) padded.append(token);
        }
        return padded.toString();
    }
}