注册 登录
编程论坛 C语言论坛

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

szchen2018 发布于 2022-04-05 20:29, 1417 次点击
程序代码:

int flash_read(UINT32 ptr_add,uint8_t *buffer,int Read_Lengh )
{
    UINT32 *ptr = (UINT32*)ptr_add;
    UINT32 buf = 0;
    int black = 0;
    int r_black = 0;
    black = Read_Lengh/4;

    while(black!= r_black)
    {
        buf = *ptr;
        buffer[0+r_black*4] = buf&0x000000ff;
        buffer[1+r_black*4] = buf>>8&0x000000ff;
        buffer[2+r_black*4] = buf>>16&0x000000ff;
        buffer[3+r_black*4] = buf>>24&0x000000ff;
        ptr++;

        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]);
        r_black++;
        if ((r_black*4)%16==0)
            printf("\n");
    }
    printf("\n");
    return (r_black*4);
}
3 回复
#2
rjsp2022-04-05 20:59
4字节一读,才需要技巧;你现在一字节一读,那啥也不需要

另外,为什么不直接用 memcpy
#3
szchen20182022-04-05 21:17
回复 2楼 rjsp
如果Read_Lengh是4的倍数(4、8、12....),现在buffer数据是一次读4个字节吧,然后返回读到的数据长度r_black,难道我理解的不对嘛?
我想改成Read_Lengh是1就读1个字节,是2就读2个字节,是3就读3个字节.....,然后也返回读到的数据长度。
#4
szchen20182022-04-23 09:39
这样修改符合期望了
程序代码:

        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);
1