gpt4 book ai didi

c - 64位系统如何添加n个字节

转载 作者:太空宇宙 更新时间:2023-11-04 03:08:05 25 4
gpt4 key购买 nike

我在 64 位 x_86 64 位 OSX 系统中工作。

我正在读取遗留数据库的文件。它被加载到内存块并使用它读取到结构的偏移量。它以 32 位模式编写。

所以为了在64位模式下正确读取,我想将 n 个字节添加到结构的基址。

自指针加速

增量并不能帮助我做到这一点因为它是在 64 位模式下,每个指针都是 b 字节长。

问候,禅那。

我在这里发布了一些代码。我想这是对的..

   struct CamNodeTag { 
CamNodeTag *nextCam; // next cam
SInt32 numMake;
char *menuMake;
};

long pBaseAddr; // this is long so we an offset bytes from it.

//Get the size of of the structure in 32 bit environment.//in 64 bit envi it is 20 bytes.
int CamNodeTagSizeIn32BitMode = 12;


//Do it in a while loop..
int i=0;
CamNodeTag * pNode = (CamNodeTag *)(pBaseAddr + i*CamNodeTagSizeIn32BitMode);

while(pNode !=NULL)
{
//Do the cam stuff here..

// to get the next node, we add the base addr to the offset


//This will give next cam
i++;
pNode = (CamNodeTag *)(pBaseAddr + i*CamNodeTagSizeIn32BitMode);

}

最佳答案

建议您使用您编写的函数从磁盘读取文件,例如 read_uint32_whatever_endian(FILE*) 等,并将它们存储在新的 64 位中-内存结构

这将您的新代码与编译器对您的结构的内存布局所做的选择隔离开来。

在现代机器上,这种解析的性能成本是如此之低,我相信你几乎无法衡量它。

虽然有一个轻微的极端情况,其中nmap存储与编译器的内存中表示相同的二进制结构的大型数据库文件是一个优势,但这种情况在实践中没有多大值(value)。

磁盘上与内存中不同序列化的好处提供了大量实用的优点:

  • 它是可移植的——您可以在具有不同字长和不同字节序的不同处理器上毫无问题地运行您的代码
  • 您可以随时扩展结构——您可以将内存中的结构变成带有方法等的对象,甚至虚拟 C++ 方法,以及面向对象设计的其他好处;您还可以添加未序列化的成员,例如指针和其他字段,并且您可以轻松支持新的数据库文件版本

关于c - 64位系统如何添加n个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2250039/

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