2

64 ビット Windows マシンで C 言語の Mexfunction を使用して、matlab で TDMS ファイルを読み取る予定ですが、32 ビット Windows マシンでアプリを開発します。32 ビット マシンと 64 ビットでは、変数のサイズに違いがあることを知っています。私は多くの fread(.. sizeof(type)..) を使用しました。64ビットマシンで実行すると問題になりますか? もしそうなら、どうすればそれを 64 ビット mahince に移植できますか?

ありがとう

4

3 に答える 3

3

ISO C99 は、ヘッダー <stdint.h> を提供します。これは、とりわけ intN_t および uintN_t の形式の型を定義します。N は、対応する整数型または符号なし整数型の幅です。実装が幅 8、16、32、または 64 の整数型を提供する場合、対応する typedef を提供する必要があります。

于 2010-06-25T01:16:10.597 に答える
1

より一般的な問題は、ファイルを読み取っているマシンではなく、ファイルを書き込んだマシン上の変数のサイズを知る必要があることです。言い換えれば、sizeof(int) と言って、クレイジーな 64 ビット システムで 8 と言うことができますが、ファイルが通常の 32 ビット マシンで保存された場合、sizeof(int) は 4 (または ANSI によると 2) である可能性があります。 c、私は思う)。sizeof コマンドは、コンパイル時にローカル マシン上の int などのサイズを示します。しかし、ファイルを保存したマシンについては何もわかりません。

あなたの最善の策は、TDMS標準(私はそれに慣れていません)が可変サイズを定義しているかどうかを確認することです. その場合は、sizeof ではなく、それらを使用する必要があります。

2 番目の方法としては、ファイルの先頭にテスト シーケンスを配置し、テスト シーケンスを正しく読み取れるようになるまで変数のサイズを動的に調整するという方法があります。

于 2010-06-27T14:17:11.550 に答える
0

はい、あなたの行動によっては問題が発生する可能性があります。たとえば、ポインターのサイズが 4 バイトまたは 8 バイトであることに依存している場合、これは問題になります。ただし、無害なことをしている場合は、そうでない可能性があります。あなたに伝えるには、特定のコードを確認する必要があると思います。要するに、64 ビットまたは 32 ビットのどちらのアーキテクチャーを使用しているかを気にせずに、これを行うための簡単な方法があるはずです。

于 2010-06-25T00:35:08.193 に答える