[英]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_t
和int64_t
来代替使用int
和long
之类的类型,它们是 typedef:s 用于在您的环境中具有正确大小的类型。 它们存在于有符号和无符号变体中,如int32_t
和uint32_t
。
为了使用它们,您需要包含stdint.h
。 如果您包含inttypes.h
,您还将获得使用 printf 打印时有用的宏,例如PRIu64
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.