用于解码二进制十进制的二维数组



好吧,简单地说我需要使用0和1创建2d数组,然后每一行从二进制形式解码为十进制(数组是a[5][8])。我的想法是每行使用指针(将有 5 个 void 函数,但 l 首先有问题,所以我停止了)。所有 l 得到的都是一些随机数,而不是简单的数组。谁能告诉我我的错误在哪里? 这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void VredBajt(int a[5][8],int *pb)
{
 for(int i=0;i<5;i++)
   {
    for(int j=0;j<8;j++)
    {
        pb=&(a[0][j]);
        pb++;
    }}}
int main()
{
   int a[5][8],i,j,pb;
   srand(time(0));
   for(i=0;i<5;i++)
   {
    for(j=0;j<8;j++)
    {
        a[i][j]=rand()%(2);
    }
   }
   for(i=0;i<5;i++)
   {
    printf("n");
    for(j=0;j<8;j++)
    {
        printf("%3d",a[i][j]); 
    }
   }
    VredBajt(a,&pb);
    printf("nn %5d",pb);
}

VredBajt 函数中的错误,您操作传递的 pb 指针,但一旦函数完成,这不起作用。
在主方面,pb 是一个从未初始化和从未分配的整数,因此打印它会显示一个随机数。

如果必须转换包含 0 或 1 的整数数组,则可以将其移动到新整数中并打印该整数。

int dec = 0;
for (int i = 7; i != 0; --i) 
{ 
  dec <<= 1; 
  dec += a[0][i]; 
}

更改:

pb=&(a[0][j]);

自:

*pb=a[0][j];

虽然,目前还不清楚您希望通过在函数 VredBajtfor 循环中为变量pb分配不同的值来实现什么(此变量将仅保留分配给它的最后一个值)。

更新:

也许你的意思是这样的:

void VredBajt(int a[4][8],int *pb)
{
    int val = 0;
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<8;j++)
        {
            val <<= 1;
            val |= a[i][j];
        }
    }
    *pb = val;
}

目前尚不清楚是希望函数VredBajt为整个表返回单个值,还是为表中的每一行返回单个值。

上面的实现假定您希望整个表只有一个值。

因此,我不得不从 5 更改为 4,因为int最多只能存储 32 位 (4 * 8)。

最新更新