обработка файлов на 64-битной машине, но развивается на 32-битной машине - PullRequest
2 голосов
/ 25 июня 2010

Я собираюсь прочитать файл TDMS в Matlab, используя Mexfunction на языке C на машине с 64-битным Windows, но я разработаю приложение на 32-битном компьютере с Windows. я знаю, что есть разница между 32-битной машиной и 64-битной с размером переменных. Я использовал много фреда (.. sizeof (тип) ..). это будет проблемой, когда он работает на 64-битной машине? если так, как я могу сделать его переносимым на 64-битный Mahince?

спасибо

Ответы [ 3 ]

3 голосов
/ 25 июня 2010

ISO C99 предоставляет заголовок , который определяет, среди прочего, типы формы intN_t и uintN_t, где N - ширина соответствующего целочисленного или целого типа без знака. Если реализация предоставляет целочисленные типы ширины 8, 16, 32 или 64, она должна предоставить соответствующие typedefs.

1 голос
/ 27 июня 2010

Более общая проблема заключается в том, что вам нужно знать, какой размер переменных был на машине, на которую записан файл, а не на машине, которая их читает.Другими словами, вы можете сказать sizeof (int) и получить скажем 8 в какой-нибудь сумасшедшей 64-битной системе, но если файл был сохранен на обычной 32-битной машине, sizeof (int) может быть 4 (или даже 2, в соответствии с ANSI).с, я думаю).Команда sizeof сообщит вам размер int или что-то еще на вашей локальной машине во время компиляции.Но он ничего не может сказать о машине, на которой сохранен файл.

Лучше всего узнать, определяет ли стандарт TDMS (я не знаком с ним) переменные размеры.Если это так, вы должны использовать их, а не sizeof.

Плохой второй вариант - иметь тестовую последовательность в начале файла и динамически корректировать размеры переменных, пока вы не сможете правильно прочитать тестовую последовательность.

0 голосов
/ 25 июня 2010

Да, потенциально может возникнуть проблема в зависимости от того, что вы делаете. Например, если вы полагаетесь на размер указателя, равный 4 или 8 байтов, это будет проблемой. Однако, если вы делаете что-то мягкое, чем, возможно, нет. Я думаю, что мы должны увидеть конкретный код, чтобы иметь возможность рассказать вам. Короче говоря, должен быть простой способ сделать это, не заботясь о том, работаете ли вы в 64-битной или 32-битной архитектуре.

...