我將在64位Windows機器上使用C語言中的Mexfunction讀取matlab中的TDMS文件,但是我將在32位Windows機器上開發該應用程序。我知道32位機器和64位變量之間存在差異。我用了很多fread(.. sizeof(type)..)。它在64位機器上運行時會出現問題嗎?如果是這樣,我怎樣才能使它移植到64位mahince?在64位機器上處理文件,但在32位機器上開發
感謝
我將在64位Windows機器上使用C語言中的Mexfunction讀取matlab中的TDMS文件,但是我將在32位Windows機器上開發該應用程序。我知道32位機器和64位變量之間存在差異。我用了很多fread(.. sizeof(type)..)。它在64位機器上運行時會出現問題嗎?如果是這樣,我怎樣才能使它移植到64位mahince?在64位機器上處理文件,但在32位機器上開發
感謝
更常見的問題是,您將不得不知道在寫入文件的機器上變量的大小,而不是正在讀取它們的機器。換句話說,你可以說sizeof(int)並且在一些瘋狂的64位系統上說8,但是如果文件保存在普通的32位機器上,根據ansi,sizeof(int)可能是4(甚至2) c,我認爲)。在編譯時,sizeof命令會告訴你本地機器上的int大小或其他什麼。但它不能告訴你任何關於保存文件的機器。
最好的辦法是看TDMS標準(我不熟悉它)是否定義了可變尺寸。如果是這樣,你應該使用這些,而不是sizeof。
糟糕的第二種選擇是在文件的開頭有一個測試序列,並動態調整變量大小,直到您可以正確讀取測試序列。
是的,有可能是一個問題,這取決於你怎麼做。例如,如果你依賴指針大小爲4個字節或8個字節,這將是一個問題。但是,如果你做的事情不是沒有的話。我想我們必須看到具體的代碼才能告訴你。總之,應該有一種直截了當的方式來解決這個問題,而不關心你是否處於64位或32位體系結構。
ISO C99提供了報頭< stdint.h>中,它定義,除其他外,類型形式intN_t和uintN_t,其中N是相應的整數或無符號整數類型的寬度。如果實現提供寬度爲8,16,32或64的整數類型,則應提供相應的typedef。
更一般地說,總是使用正確的整數大小,特別是size_t用於數組索引,off_t用於文件偏移量。切勿使用純int(或short或其他),但始終使用爲特定用途預見的typedef。我不知道windows,在gnu平臺上,你有一個宏可以告訴總是使用open等函數的64位變體。窗戶也可能有這樣的事情。 – 2010-06-25 07:46:08