2

我将在 64 位 Windows 机器上使用 C 语言中的 Mexfunction 在 matlab 中读取 TDMS 文件,但我将在 32 位 Windows 机器上开发应用程序。我知道 32 位机器和 64 位机器之间存在变量大小的差异。我用了很多 fread(.. sizeof(type)..)。当它在 64 位机器上运行时会出现问题吗?如果是这样,我怎样才能使它可移植到 64 位机器?

谢谢

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(甚至 2,根据 ansi c,我认为)。sizeof 命令将在编译时告诉您本地计算机上的 int 或其他值的大小。但它无法告诉您有关保存文件的机器的任何信息。

您最好的选择是查看 TDMS 标准(我不熟悉它)是否定义了可变大小。如果是这样,您应该使用这些,而不是 sizeof。

一个糟糕的第二种选择是在文件的开头有一个测试序列,并动态调整你的变量大小,直到你可以正确地读取测试序列。

于 2010-06-27T14:17:11.550 回答
0

是的,根据您的操作,可能存在问题。例如,如果您依赖指针大小为 4 字节或 8 字节,这将是一个问题。但是,如果您正在做一些良性的事情,则可能不是。我想我们必须看到具体的代码才能告诉你。简而言之,应该有一种直接的方法来解决这个问题,而无需关心您是在 64 位还是 32 位架构中。

于 2010-06-25T00:35:08.193 回答