Python - Как отредактировать шестнадцатеричный байт файла байтом

Вы не можете записать приложение Какао полностью в C++. Какао полагается в большой степени на возможности позднего связывания Objective C для многих его базовых технологий, таких как Привязка Значения ключа, делегаты (Стиль какао), и шаблон целевого действия. Требования позднего связывания делают очень трудным реализовать Какао API в связанное время компиляции, типизированный язык как C++ вЃ±. Можно, конечно, записать чистое приложение C++, которое работает на OS X. Это просто не может использовать API Какао.

Так, у Вас есть две опции, если Вы хотите совместно использовать код между приложениями C++ на других платформах и Вашим Основанным на какао приложением. Первое должно записать образцовый слой в C++ и GUI в Какао. Это - общий подход, используемый некоторыми очень крупными приложениями, включая Mathematica. Ваш код C++ может быть оставлен без изменений (Вы не нуждаетесь в "броских" расширениях яблока записи или компилируете C++ на OS X). Ваш слой контроллера, вероятно, использует Objective C ++ (возможно, "броское" расширение Apple, которое Вы отсылаете к). Objective C ++ является надмножеством C++, как Objective C является надмножеством C. В Objective C ++, можно выполнить вызовы передачи сообщений objc-стиля (как [some-objc-object callMethod];) из функции C++. С другой стороны можно вызвать функции C++ из кода ObjC как:

@interface MyClass {
    MyCPPClass *cppInstance;
}
@end

@implementation MyClass
- (id)init {
    if(self = [super init]) {
        cppInstance = new MyCPPClass();
    }
    return self;
}
- (void) dealloc {
    if(cppInstance != NULL) delete cppInstance;
    [super dealloc];
}
- (void)callCpp {
    cppInstance->SomeMethod();
}
@end

можно узнать больше о Objective C ++ на языке Objective C руководство . Слой представления может затем быть чистым Objective C.

вторая опция состоит в том, чтобы использовать межплатформенный инструментарий C++. инструментарий Qt мог бы отвечать всем требованиям. Межплатформенные инструментарии обычно презираются пользователями Mac, потому что они не получают все детали стиля, точно правильные и пользователи Mac ожидают полировку в UI приложений Mac. QT делает удивительно хорошее задание, однако, и в зависимости от аудитории и использования Вашего приложения, это может быть достаточно хорошо. Кроме того, Вы будете терпеть неудачу на некоторых определенных для OS X технологиях, таких как Базовая Анимация и некоторая функциональность QuickTime, хотя существуют приблизительные замены в QT API. Как Вы указываете, Углерод не будет портирован к 64-разрядному. Так как QT реализован на Углеродных API, Trolltech/Nokia имели к порту Qt к Какао API для создания его 64-разрядным совместимый. Мое понимание - то, что следующие повторно генерируют QT (в настоящее время в candiate выпуска), завершает этот переход и 64-разрядный совместимый на OS X. Можно хотеть взглянуть на источник Qt 4.5, если Вы интересуетесь интеграцией C++ и API Какао.

вЃ± Некоторое время Apple сделала Какао API доступный Java, но мост потребовал обширной настройки руки и не мог обработать больше передовых технологий, таких как Привязка Значения ключа, описанная выше. Ограниченные временем выполнения языки в настоящее время с динамическим контролем типов как Python, Ruby, и т.д. являются единственной реальной опцией для записи приложения Какао без Objective C (хотя, конечно, эти мосты используют Objective C под капотом).

10
задан Tony Stark 24 August 2009 в 13:42
поделиться

4 ответа

В стандартной библиотеке Python есть модуль mmap, который можно использовать именно для этого. Дополнительную информацию можно найти в документации .

10
ответ дан 3 December 2019 в 16:29
поделиться

В зависимости от того, что вы хотите сделать, может быть достаточно открыть файл в двоичном режиме и прочитать данные с помощью обычных функций file :

# load it
with open("somefile", 'rb') as f:
    data = f.read()

# do something with data
data.reverse()

# save it
with open("somefile.new", 'wb') as f:
    f.write(data)

Python не заботится о том, содержит ли строка data «двоичные» или «текстовые» данные. Если вы просто хотите внести простые изменения в файл разумного размера, этого, вероятно, будет достаточно.

10
ответ дан 3 December 2019 в 16:29
поделиться

Не говорю, что он «лучший», но в последнее время я использую GWT-Ext на работе. У него есть свои плюсы и минусы:

Плюсы:

  • Относительно проста в установке и использовании
  • За этим стоит довольно большое сообщество
  • МНОГО примеров в Интернете, все из которых имеют сопроводительный код
  • Хороший выбор виджетов которые охватывают широкий спектр функций

Минусы:

  • Делает предположения о формате и структуре ваших данных, которые вы, возможно, не сможете принять.
  • Библиотека - это просто оболочка JSNI, что затрудняет отладку и расширение
  • Дальнейшая поддержка и развитие библиотеки неизвестны
  • Некоторые досадные кроссбраузерные проблемы все еще существуют (особенно с макетами)
  • Функция поиска на их форумах по существу бесполезна. (Это становится моей любимой головной болью> _ <
4
ответ дан 3 December 2019 в 16:29
поделиться

Проверьте модуль stuct .

Этот модуль выполняет преобразования между значениями Python и структурами C, представленными в виде строк Python. Он использует строки формата (поясняемые ниже) в качестве компактного описания структуры структур C и предполагаемого преобразования в / из значений Python. Это можно использовать для обработки двоичных данных, хранящихся в файлах или из сетевых подключений, среди других источников.

1
ответ дан 3 December 2019 в 16:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: