Используйте функцию int
с base
в 2
, чтобы читать двоичное значение как целое число.
n = int('01010101', 2)
Python 2 использует строки для обработки бинарные данные, поэтому вы должны использовать функцию chr()
для преобразования целого в однобайтную строку.
data = chr(n)
Python 3 обрабатывает двоичный код и текст по-разному, поэтому вы необходимо использовать тип bytes
. Это не имеет прямого эквивалента функции chr()
, но конструктор bytes
может принимать список байтовых значений. Мы помещаем n
в массив из одного элемента и преобразуем его в объект bytes
.
data = bytes([n])
После того, как у вас есть двоичная строка, вы можете открыть файл в двоичном режиме и записать данные в это так:
with open('out.bin', 'wb') as f:
f.write(data)
Вам нужно извлечь оба файла JAR и восстановить их. Strike>
jar -xvf jar1.jar tmp
jar -xvf jar2.jar tmp
cd tmp
jar -cvf jar3.jar .
Пожалуйста, обратитесь к ниже ответу .
Используйте zipgroupfileset с заданием Ant Zip
<zip destfile="out.jar">
<zipgroupfileset dir="lib" includes="*.jar"/>
</zip>
Может помочь вам.
Конечно, просто извлеките два файла jar и воссоздайте новый
$ mkdir tmp
$ (cd tmp; unzip -uo ../jar1.jar)
$ (cd tmp; unzip -uo ../jar2.jar)
$ jar -cvf combined.jar -C tmp .
Материал с tmp
гарантирует, что два существующих файла jar будут извлечены в чистый каталог, а затем новый из что.
Помните, что вам также может потребоваться объединить любые содержащиеся в нем manifest.mf
файлы, и, если они есть, также включите опцию «-m» в эту файловую команду.
Если вы используете gradle, просто добавьте следующее в build.gradle. Никаких плагинов не требуется. Если вам нужны специальные опции, тогда используйте плагин Fatjar, как предполагает initialZero.
task superSimpleJar(type: Jar) {
baseName = project.name + '-all'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}
Для проекта Android добавьте это в app / build.gradle и запустите «gradlew superSimpleJar». Найдите jar в build / libs / app-all.jar
task superSimpleJar(type: Jar) {
baseName = project.name + '-all'
from {
configurations.compile.findAll {
it.getName() != 'android.jar'
}.collect {
it.isDirectory() ? it : zipTree(it)
}
}
}
Просто распакуйте оба jar-файла, затем заархивируйте результаты в один zip-файл и переименуйте его в jar.
Но, как сказал адаршр: для этого лучше использовать команду jar.
Извлеките обе банки и создайте новую. (Используйте команды jar, показанные выше). Одно предостережение о файле манифеста заключается в том, что вы хотите извлечь файл jar, файл манифеста которого вы хотите сохранить в последнем.
<?xml version="1.0" encoding="UTF-8"?>
<project name="zip-test" default="zip" basedir=".">
<target name="zip">
<zip destfile="out.jar">
<zipgroupfileset dir="." includes="*.jar"/>
</zip>
</target>
</project>
сохраните этот код в файле build.xml
и сохраните его в той же папке, где хранятся все файлы JAR, которые будут объединены. Откройте cmd
, укажите путь к папке и выполните команду: ant zip
.
Он будет генерировать out.jar
, который является комбинацией всех банок.
Я знаю, что это старый вопрос, и я просто хотел добавить свои два цента (пока нет комментариев, поэтому создаю новый ответ).
Я вижу значение в ответе sumanth.donthula, поскольку проблема для всех нас, сливающихся в jar, заключается в том, как обращаться с файлами манифеста. В моем случае я хотел объединить некоторые библиотечные файлы (в основном сгенерированный клиентский код веб-службы) в банку приложения, написанного мной. Это было нормально, чтобы заменить манифесты с моей собственной банке.
Самый простой способ сделать это - позаботиться о порядке, в котором вы распакуете исходные файлы (как отметили Alnitak и sumanth.donthula).
Я хотел использовать задание zip ant (спасибо, ykombinator, за идею). Оказалось, что единственный способ контролировать порядок сжатия / упаковки - это переименование файлов. См. Мою цель муравья ниже.
Выходной каталог в моем примере называется codemodule.dir (я создал модуль кода FileNet). Остальные имена говорят сами за себя. Важным шагом является переименование jar приложения в 0 _..., чтобы он стал первым по порядку. Таким образом, его манифест будет сохранен, так как для атрибута duplicate задачи zip ant установлено сохранение.
<target name="merge_jars">
<delete dir="${codemodule.dir}" quiet="true" />
<mkdir dir="${codemodule.dir}" />
<copy todir="${codemodule.dir}">
<fileset dir="${lib.dir}" includes="*.jar"/>
<fileset dir="${basedir}" includes="${app-name}.jar"/>
</copy>
<move file="${codemodule.dir}/${app-name}.jar" tofile="${codemodule.dir}/0_${app-name}.jar"/>
<zip destfile="${codemodule.dir}/${app-name}-fat.jar" duplicate="preserve">
<zipgroupfileset dir="${codemodule.dir}">
<include name="*.jar"/>
</zipgroupfileset>
</zip>