gpt4 book ai didi

c++ - 兼容性和结构填充

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

在 Linux(64 位操作系统)中只有一种结构我执行了以下操作以将此结构输出为 Hexa 代码。

在下面的代码之后,“strBuff”将以与“printf”相同的方式输出到文件中,这是一个需要从窗口读取的情况,应该存储在与上面“示例”相同的结构中。但是,这里出现了问题。在我当前的窗口中,unsigned long 大小是 4byte。在我当前的 Linux 中,unsigned long 大小为 8byte。

所以输出文本中有太多的零输出。这似乎与填充位有关。预计应该只填充2个字节,而填充是按4个字节完成的。无法更改“example”结构,因为代码是从linux输出时认为是4byte实现的,代码已经在完成阶段。

我有两件事要问。

  1. 如果我需要去掉输出代码中不必要的零十六进制怎么办?目前,我们正在使用硬编码方法来跳过所有 unsigned long 和 signed long 变量。

  2. 应该解决windows和linux的兼容问题。

代码在读取端和输出端都可以更改。有没有解决上述问题和兼容性的lib可以解决padding问题?

enter code here

struct example
{
unsigned long Ul;
int a;
signed long Sl;
}

struct examle eg;

// data input at eg

char *tempDataPtr = (char*)(&eg);

for(int i = 0 ; i < size(example) ; i++)
{
sprintf(&strBuff[i*3],"%02X ", tempDataPtr[i]);
}

最佳答案

使用具有明确格式的类型:(并将它们从大到小排序,以防止字段之间的填充差异)

struct example
{
uint32_t Ul;
int32_t Sl;
int16_t a;
}

关于c++ - 兼容性和结构填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44103484/

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