gpt4 book ai didi

c - 使用指针遍历内存中困惑的二进制记录列表

转载 作者:太空狗 更新时间:2023-10-29 15:40:20 28 4
gpt4 key购买 nike

我有以下 .bin 文件

1f ac 00 78 00 3f 00 c3 00 83....

我应该使用指针算法来完成它。我应该获取第一个字节,它会告诉我要处理多少个“单词”,然后每两个字节会告诉我应该开始读取的偏移量。我的问题是我毫无问题地获得了第一个字节,但现在我要做的就是增加我的指针,使其指向 ac,将其转换为 uint16_t,打印出该值,执行一些程序,现在我希望它指向 78。这是我到目前为止所写的内容:

 Pre: Buffer points to a region of memory formatted as specified.
Log points to an opened text file.
Post: The target of Buffer has been parsed and report written as specified
uint8_t doStuff(uint8_t *Buffer, FILE *Log) // given function parameters
{
int wordsToProcess = *(Buffer); // get that first byte
uint16_t offset = 0;
bool firstTime = true;

for (int i = 0; i < wordsToProcess; i++)
{
if (firstTime)
{
Buffer++; // I've tried Buffer += 1;
offset = *((uint16_t*)Buffer); // casting turns into little endian.
// I want 00 ac but I'm not getting that

fprintf(Log, "Looking for %0X words, starting at %0X\n",
wordsToProcess, offset);

firstTime = false;
}
else
{
Buffer += 2;
offset = *((uint16_t*)Buffer);
}
}
}

我什至从 hexdump 中删除了除了前两个字节之外的几乎所有内容,但我仍然得到 66。我也尝试过使指针具有与 Buffer 相同的地址并从那里开始,因为我认为可能使用 Buffer 会给我带来问题,但同样的处理。谁能帮我弄清楚我做错了什么?

最佳答案

我不知道可能是什么问题,因为可能是数据不是您期望的那样。但是您的代码有一些问题恕我直言。

这样它会更易读、更容易理解、维护,因此(更容易编写,错误更少)。

uint8_t
doStuff(uint8_t *buffer, FILE *log)
{
int wordCount = *buffer++;
uint16_t *pointer = (uint16_t *) buffer;
uint16_t offset = *pointer++;
pointer += offset;
for (int i = 0; i < wordCount; i++)
fprintf(log, "0x%04X ", *pointer++);
return 0 // I don't know what you want to return;
}

请注意,如果数据没有预期的结构,此代码将导致未定义的行为

关于c - 使用指针遍历内存中困惑的二进制记录列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34013094/

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