обработка файлов на 64-битной машине, но разработка на 32-битной машине


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

Спасибо

3 2

3 ответа:

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

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

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

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

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