gpt4 book ai didi

c - 简单的 32 位到 64 位转换?

转载 作者:行者123 更新时间:2023-12-04 12:09:00 25 4
gpt4 key购买 nike

有没有一种简单的方法可以将 32 位 C 代码编译成 64 位应用程序,并且只需要很少的修改?代码未设置为使用固定类型大小。

我对利用 64 位内存寻址不感兴趣。我只需要编译成 64 位二进制文​​件,同时保持 4 字节长和指针。

就像是:

#define long int32_t

但当然,这打破了许多长用例并且不处理指针。我认为这里可能有一些标准程序。

最佳答案

“可移植性”似乎有两个正交的概念:

  • 我的代码开箱即用地到处编译。它的一般行为在所有平台上都是相同的,但可用功能的详细信息因平台的特性而异。
  • 我的代码包含一个与架构相关的东西的文件夹。我保证 MYINT32 无论如何都是 32 位的。我成功地将 32 位的概念移植到了火星的九指毛茸茸的 lummoxes 中。

  • 在第一种方法中,我们写 unsigned int n;printf("%u", n)我们知道代码总是有效的,但是像 unsigned int 的数字范围这样的细节由平台决定,与我们无关。 ( Wchar_t 也出现在这里。)这就是我所说的真正便携的风格。

    在第二种方法中,我们对所有内容进行 typedef 并使用像 uint32_t 这样的类型。 .使用 printf 格式化输出触发大量警告,我们必须求助于 PRI32 这样的怪物.在这种方法中,我们从知道我们的整数总是 32 位宽中获得了一种奇怪的力量和控制感,但我不愿称其为“便携”——它只是固执。

    需要特定表示的基本概念是序列化:您在一个平台上编写的文档应该在所有其他平台上都可读。序列化自然是我们放弃类型系统的地方,必须担心字节顺序并需要决定固定的表示形式(包括文本编码之类的东西)。

    结果是这样的:
  • 使用标准语言原语以可移植风格编写您的主程序核心。
  • 为序列化编写定义良好、干净的 I/O 接口(interface)。

  • 如果您坚持这一点,您甚至不必考虑您的平台是 32 位还是 64 位、大端还是小端、Mac 还是 PC、Windows 还是 Linux。坚持标准,标准就会与你同在。

    关于c - 简单的 32 位到 64 位转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6528232/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com