找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 936|回复: 5
收起左侧

C语言一次按4字节倍数读取,怎么优雅改成按读1字节倍数读取呢?

[复制链接]
ID:731155 发表于 2022-4-5 19:43 | 显示全部楼层 |阅读模式
C语言源程序如下:
  1. int flash_read(UINT32 ptr_add,uint8_t *buffer,int Read_Lengh )
  2. {
  3.         UINT32 *ptr = (UINT32*)ptr_add;
  4.         UINT32 buf = 0;
  5.         int black = 0;
  6.         int r_black = 0;
  7.         black = Read_Lengh/4;

  8.         while(black!= r_black)
  9.         {
  10.                 buf = *ptr;
  11.                 buffer[0+r_black*4] = buf&0x000000ff;
  12.                 buffer[1+r_black*4] = buf>>8&0x000000ff;
  13.                 buffer[2+r_black*4] = buf>>16&0x000000ff;
  14.                 buffer[3+r_black*4] = buf>>24&0x000000ff;
  15.                 ptr++;

  16.                 printf("%02X %02X %02X %02X ",buffer[0+r_black*4],buffer[1+r_black*4],buffer[2+r_black*4],buffer[3+r_black*4]);
  17.                 r_black++;
  18.                 if ((r_black*4)%16==0)
  19.                         printf("\n");
  20.         }
  21.         printf("\n");
  22.         return (r_black*4);
  23. }
复制代码


回复

使用道具 举报

ID:883242 发表于 2022-4-5 23:57 | 显示全部楼层
  1. uint8_t *ptr = ptr_add;
  2. ...
  3.                 buf = *ptr;
  4.                 buffer[0+r_black*4] = *(ptr++);
复制代码
回复

使用道具 举报

ID:731155 发表于 2022-4-6 01:08 | 显示全部楼层

感谢帮忙解答,写的好简洁,我试试看
回复

使用道具 举报

ID:310441 发表于 2022-4-6 06:55 来自手机 | 显示全部楼层
这是指针最基础的用法,C++最精髓的地方了,不是说教,这都没理解好就强行编码会陷入更大的麻烦的。
回复

使用道具 举报

ID:731155 发表于 2022-4-6 12:10 | 显示全部楼层
hei51com 发表于 2022-4-6 01:08
感谢帮忙解答,写的好简洁,我试试看

这样修改后,符合期望了
int ByteReadFlash(UINT32 ptr_add,uint8_t *buffer,int Read_Lengh )
{
        uint8_t *ptr = ((uint8_t*)ptr_add);
        int black = 0;
        int r_black = 0;
        black = Read_Lengh;
                printf("Read_Lengh %d,black %d\n",Read_Lengh,black);
        while(black!= r_black)
        {
                buffer[0+r_black] = *(ptr++);
                printf("%02X ",buffer[0+r_black]);
                r_black++;
                if ((r_black)%16==0)
                        printf("\n");
        }
        printf("\n");
        return (r_black);
}
回复

使用道具 举报

ID:731155 发表于 2022-4-6 12:14 | 显示全部楼层
DoneDone 发表于 2022-4-6 06:55
这是指针最基础的用法,C++最精髓的地方了,不是说教,这都没理解好就强行编码会陷入更大的麻烦的。

说的确实是,我一直没能理解好,请教下有没有窍门呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表