这个愚蠢的结构我一直有很多麻烦.我不明白为什么会这样做,我真的不确定如何解决它.我知道如何修复它的唯一方法是删除结构并以其他方式执行(我不想这样做).
所以我正在从一个文件中读取数据,而我正在将它读入一个结构指针.看起来我的'long long'的偏移/指针每次都搞砸了.在下面详细查看.
所以这是我的结构:
struct Entry
{
unsigned short type;
unsigned long long identifier;
unsigned int offset_specifier, length;
};
Run Code Online (Sandbox Code Playgroud)
这是我的代码,用于读取结构指针/数组中的所有废话:
Entry *entries = new Entry[SOME_DYNAMIC_AMOUNT];
fread(entries, sizeof(Entry), SOME_DYNAMIC_AMOUNT, openedFile);
Run Code Online (Sandbox Code Playgroud)
如您所见,我将所有内容写入结构数组中.现在,我将向您展示我正在阅读的数据(对于此示例中的第一个结构).
所以这是进入'条目'中第一个元素的数据.第一项(短,'类型'),似乎读得很好.之后,当读取'标识符'时,似乎整个结构被移位了X个字节.这是第一个元素的图片(在反转endian之后):
这里是内存中的数据(红色方块是它开始的地方):
我知道这有点令人困惑,但我试图尽可能地解释它.感谢任何帮助,Hetelek.:)
使用额外字节填充结构,以便更快地访问字段.您可以防止这种带有#pragma pack
:
#pragma pack(push, 1)
struct Entry
{
/* ... */
};
#pragma pack(pop)
Run Code Online (Sandbox Code Playgroud)
请注意,这可能不是100%可移植的(我知道至少GCC和MSVC支持x86).
归档时间: |
|
查看次数: |
165 次 |
最近记录: |