#java #arrays #binary #byte #base
#java #массивы #двоичный #байт #основание
Вопрос:
У меня есть массив целых чисел.Я считываю каждое значение, используя цикл for. Теперь я хочу добавить двоичный код каждого значения и получить десятичную дробь добавленного двоичного файла.
например.
массив => 01 05
двоичный файл=> 00000001 00000101
добавленный двоичный файл => 0000000100000101, который дает десятичное число 261.
Как мне это сделать?
пожалуйста, помогите.
Комментарии:
1. Это своего рода неэффективный способ вычисления базовых значений 256. Это домашнее задание?
2. нет, это не домашнее задание …. у меня есть некоторый массив, в котором первые два байта задают размер остальных полезных значений.
3. Размер оставшихся значений? Тогда вы не хотите возиться со слиянием двоичных строк вместе. Это звучит как кадрирование.
4. Я предполагаю, что это должно быть: «У меня есть массив из байтов «.
Ответ №1:
Поскольку это не домашнее задание, нет необходимости выполнять неэффективный промежуточный шаг «преобразования в двоичный» (целые числа в компьютерах уже хранятся в двоичном формате!)
public class Testy {
public static void main(String[] args) {
int[] arr = new int[] { 1, 5 };
int sum = 0;
for (int i = 0; i < arr.length; i ) {
int val = arr[i];
sum = (sum << 8) val;
}
System.out.println("final: " sum);
}
}
И если вы собираетесь включить более 3 целых чисел, вы должны сделать sum
a long
вместо int
, иначе вы можете получить переполнение.
Кстати, как ваш цикл for получает значения? Если он считывает отдельные байты и преобразует их в целые числа, возможно, имеет больше смысла считывать короткие или целые числа за один раз, хотя следите за порядком следования.
Комментарии:
1. Да, это более эффективно 🙂
Ответ №2:
public class Testy {
public static void main(String[] args) {
int[] arr = new int[] { 1, 5 };
StringWriter sw = new StringWriter();
for (int i = 0; i < arr.length; i ) {
int val = arr[i];
String s = String.format("s", Integer.toBinaryString(val));
sw.append(s);
}
System.out.println("final: " Integer.parseInt(sw.toString(), 2));
}
}
Результат: 261. Надеюсь, это поможет 🙂
Комментарии:
1. Другой ответ работает лучше и эффективнее, вам было бы лучше использовать это 🙂
2. Я собираюсь научить вас кое-чему: D. Попробуйте это: измените формат на
"s"
и удалите заменяющую часть.