将 4 个不同的整数转换为设定长度的字节数组
Converting 4 different integers into a set length byte arrays
我正在尝试从文本文件转换 4 个整数并将它们转换并分配到 26 字节的字节数组中。
例如。文本文件包含数字 1
8
113
4
并且这四个整数将按以下顺序连续放置:
001 01000 0001110001 00000100
进一步重申,我想设置 4 个字节并放入一个 int,所以不要像这样输出 2
10
我想要这样
0010
编辑:基本上对于上面的示例,我只想要 4 个不同的字节数组,它们的设置长度为 3、5 等,并且想在每个数组中插入一个 int。很抱歉让它变得混乱。
如果我理解你的问题,你可以先写一个函数来用前导字符填充 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
使用填充,您可以实现类似以下的效果。 String.format("%0{n}d", number)
在这里不起作用,因为位串不是整数,您只能 prepend/append 个空格到字符串。
输出
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();
}
}
我正在尝试从文本文件转换 4 个整数并将它们转换并分配到 26 字节的字节数组中。
例如。文本文件包含数字 1
8
113
4
并且这四个整数将按以下顺序连续放置:
001 01000 0001110001 00000100
进一步重申,我想设置 4 个字节并放入一个 int,所以不要像这样输出 2
10
我想要这样
0010
编辑:基本上对于上面的示例,我只想要 4 个不同的字节数组,它们的设置长度为 3、5 等,并且想在每个数组中插入一个 int。很抱歉让它变得混乱。
如果我理解你的问题,你可以先写一个函数来用前导字符填充 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
使用填充,您可以实现类似以下的效果。 String.format("%0{n}d", number)
在这里不起作用,因为位串不是整数,您只能 prepend/append 个空格到字符串。
输出
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();
}
}