使用指针浏览内存中的二进制记录的纠结列表

使用指针浏览内存中的二进制记录的纠结列表,第1张

概述我有以下.bin文件 1f ac 00 78 00 3f 00 c3 00 83.... 我应该使用指针算法来完成它.我应该抓住第一个字节,它会告诉我将要处理多少“单词”,然后每两个字节就会告诉我我应该开始读取的偏移量.我的问题是我得到第一个字节没有任何问题,但现在我所要做的就是增加我的指针,使其指向ac,将其转换为uint16_t,打印出该值,执行一些程序,现在我希望它指向78.这是我到目前为止 我有以下.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 specifIEduint8_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_tdoStuff(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;}

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

总结

以上是内存溢出为你收集整理的使用指针浏览内存中的二进制记录的纠结列表全部内容,希望文章能够帮你解决使用指针浏览内存中的二进制记录的纠结列表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1228002.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存