C#/.NET - Пользовательские Форматы Двоичного файла - Где Запустить?

Так как Apple объявляет, что iOS-приложение должно нормально работать и в ipad. Итак, нам нужно убедиться, что когда мы снимаем фотографию с камеры и выбираем из библиотеки фотографий, нам также необходимо обновить код для iPad относительно UIImagePickerViewController. Я прилагаю код, который работает как на iPhone, так и на iPad.

let actionSheetController: UIAlertController = UIAlertController(title: "Select Photo", message: "", preferredStyle: .actionSheet)

    let cancelActionButton: UIAlertAction = UIAlertAction(title: "Cancel", style: .cancel) { action -> Void in
        print("Cancel")
    }
    actionSheetController.addAction(cancelActionButton)


    let saveActionButton: UIAlertAction = UIAlertAction(title: "Photolibrary", style: .default)
    { action -> Void in

        self.picker.allowsEditing = true
        self.picker.sourceType = .photoLibrary
        self.present(self.picker, animated: true, completion: nil)

    }
    actionSheetController.addAction(saveActionButton)

    let deleteActionButton: UIAlertAction = UIAlertAction(title: "Camera", style: .default)
    { action -> Void in

        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera)
        {
            self.picker.allowsEditing = true
            self.picker.sourceType = .camera
            self.present(self.picker, animated: true, completion: nil)
        }

    }

    actionSheetController.addAction(deleteActionButton)

    if let popoverController = actionSheetController.popoverPresentationController {

        popoverController.sourceView = self.view
        popoverController.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0)
        popoverController.permittedArrowDirections = []
    }
    self.present(actionSheetController, animated: true, completion: nil)
6
задан BinaryMisfit 19 October 2009 в 11:38
поделиться

4 ответа

Как насчет использования "буферов протокола"? Разработанный как эффективный, переносимый, совместимый с версией двоичный формат общего назначения, он предоставляет вам C ++, Java и Python в библиотеке Google , а также C #, Perl, Ruby и другие в общественных портах ?

Обратите внимание, что Guid не имеет определенного типа данных, но вы можете использовать его как сообщение с (по существу) байтом [] .

Обычно для. NET работа, я бы порекомендовал protobuf-net (но, как автор, я несколько предвзят) - однако, если вы собираетесь использовать другие языки позже, вы могли бы сделать лучше (в долгосрочной перспективе), используя Jon's Dotnet-protobufs ; это даст вам знакомый API для разных платформ (где protobuf-net использует идиомы .NET).

7
ответ дан 8 December 2019 в 17:27
поделиться

Символы ASCII 0 или 1 занимают несколько битов (как и любой другой символ), поэтому, если вы храните его так, ваш «двоичный» файл будет в несколько раз больше, чем должен быть. Текстовый файл с нулями и единицами не является двоичным файлом:)

Вы можете использовать BinaryWriter для записи необработанных данных непосредственно в файловый поток . Единственная часть, которую вам нужно выяснить, - это преобразование вашего формата в памяти (обычно некоторый вид графов объектов) в последовательность байтов, которую может использовать BinaryWriter.

Однако , если ваш основной интерес - это переносимость, я рекомендую против двоичного формата вообще. XML точно разработан для решения проблемы переносимости и совместимости. Это многословный и весомый формат файла, но это Это компромисс, который вы делаете, чтобы решить эти проблемы за вас. Если удобочитаемый формат находится вне таблицы, ответ Марка - это путь. Не нужно изобретать колесо переносимости!

3
ответ дан 8 December 2019 в 17:27
поделиться

Предположим, ваш формат:

    struct Format
    {
        struct Header // 1
        {
            byte a;
            bool b1, b2, b3, b4, b5, b6, b7, b8;
            string name;
        }
        struct Container // 1...*
        {
            MyTypeEnum Type;
            byte[] data;
        }
    }

    enum MyTypeEnum
    {
        Sound,
        Video,
        Image
    }

Тогда у меня будет последовательный файл с:


байт // a

байт // b

int // имя размера

char [] // name (размер которого указан выше, помните, что в .NET значение char равно 16 битам)

int // MyTypeEnum type

int // размер данных

byte [] / / data (размер которого указан выше)


Затем вы можете повторять последние три строки столько раз, сколько хотите.

Для чтения вы используете BinaryReader , который поддерживает чтение байтов, целых чисел. и серия байтов. Существует также BinaryWriter .

Кроме того, помните, что Microsoft .NET (то есть на компьютере с Windows / Intel) имеет младший порядок. Как и BinaryReader и BinaryWriter .

1
ответ дан 8 December 2019 в 17:27
поделиться

Это зависит от того, какой тип данных вы будете записывать в двоичный файл и какова цель двоичного файла. Это объект класса или просто запись данных? Если это записи данных, я бы порекомендовал поместить их в формате XML. Таким образом, вы можете включить проверку схемы для проверки соответствия файла вашим стандартам. В java и .NET есть инструменты для импорта и экспорта данных из / в формат xml.

1
ответ дан 8 December 2019 в 17:27
поделиться
Другие вопросы по тегам:

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