繁体   English   中英

在 64 位系统 (Linux) 上处理来自 32 位代码库的长类型

[英]Dealing with long type from a 32-bit codebase on a 64-bit system (Linux)

我有一个最初在 1995 年编写的程序,一直保持到 2012 年。

它显然是为 32 位架构编写的,我已经设法让该死的东西运行,但我对它如何保存数据感到困惑......

我的问题是 64 位下的 sizeof(long) (我知道的一个常见问题),我尝试在代码中执行 sed 并将 long 替换为 int_32t,但是在尝试定义变量时出现错误:

unsigned long int count;

我还在 gcc 选项上尝试了 -m32 ,但由于需要 64 位库,它无法链接。

我的主要问题是它试图在以下代码行中保存玩家数据(它是一个 MUD):

if ((sizeof(char) != 1) || (int_size != long_size))
   {
     logit(LOG_DEBUG,
           "sizeof(char) must be 1 and int_size must == long_size for player saves!\n");
     return 0;
   }

注释掉这个允许文件保存,但是因为它在重新加载字符时从缓冲区读取字节,所以加载 function 不再读取保存的文件。

任何人都可以提供建议,也许使用 typedef?

我试图避免完全重写保存/加载例程 - 这是我最后的手段..

提前感谢您的回答!

您可以使用int32_tint64_t来代替使用intlong之类的类型,它们是 typedef:s 用于在您的环境中具有正确大小的类型。 它们存在于有符号和无符号变体中,如int32_tuint32_t

为了使用它们,您需要包含stdint.h 如果您包含inttypes.h ,您还将获得使用 printf 打印时有用的宏,例如PRIu64

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM