兼容性和结构填充

时间:2017-05-22 01:40:00

标签: c++ c linux windows

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

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

因此输出文本中的零输出太多。 这似乎与填充位有关。预计只有2个字节应该填充,填充由4个字节完成。 不可能改变结构“示例”,因为代码是通过在从linux输出并且代码已经处于完成阶段时认为它是4byte来实现的。

我有两件事要问。

  1. 如果我需要在输出代码中删除不必要的零六进制怎么办? 目前,我们使用硬编码方法跳过所有无符号长和有符号长变量。

  2. 应该解决Windows和Linux之间的兼容性问题。

  3. 可以在读取侧和输出侧更改代码。是否有与上述问题和兼容性相关的lib可以解决填充问题?

    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]);
    }
    

1 个答案:

答案 0 :(得分:1)

使用具有明确格式的类型: (并且从大到小对它们进行排序以获得良好的测量,以防止字段之间的填充差异)

struct example
{
    uint32_t Ul;
    int32_t Sl;
    int16_t a;
}
相关问题