【问题标题】:processing files in 64 bit machine but developing in 32 bit machine在 64 位机器上处理文件,但在 32 位机器上开发
【发布时间】:2011-03-08 00:53:14
【问题描述】:

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

谢谢

【问题讨论】:

    标签: c matlab file-io 32bit-64bit mex


    【解决方案1】:

    ISO C99 提供了头​​文件 ,其中定义了 intN_t 和 uintN_t 形式的类型,其中 N 是相应整数或无符号整数类型的宽度。如果实现提供宽度为 8、16、32 或 64 的整数类型,则应提供相应的 typedef。

    【讨论】:

    • 更一般地说,始终使用正确的整数大小,特别是 size_t 用于数组索引,off_t 用于文件偏移。永远不要使用普通的 int (或 short 或其他),但始终使用为特定目的预见的 typedef。我不知道windows,在gnu平台上你有一个宏告诉你总是使用open etc函数的64位变体。可能windows也有这样的东西。
    【解决方案2】:

    更普遍的问题是您必须知道变量的大小在写入文件的机器上,而不是在读取它们的机器上。换句话说,你可以说 sizeof(int) 在一些疯狂的 64 位系统上说 8,但如果文件保存在普通的 32 位机器上,sizeof(int) 可能是 4(甚至 2,根据 ansi c,我认为)。 sizeof 命令将在编译时告诉您本地计算机上的 int 或其他内容的大小。但它无法告诉您有关保存文件的机器的任何信息。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-08-08
        • 2011-04-09
        • 1970-01-01
        • 2012-04-12
        • 1970-01-01
        • 2014-11-27
        • 2012-07-25
        • 2012-12-14
        • 1970-01-01
        相关资源
        最近更新 更多