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

时间:2014-01-17 09:56:58

标签: c++ arrays binary decimal

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

#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("\n\n %5d",pb);
}

2 个答案:

答案 0 :(得分:0)

变化:

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

要:

*pb=a[0][j];

尽管如此,通过在函数pb的{​​{1}}循环中为变量for分配不同的值,仍然不清楚您希望实现的目标(此变量仅保留最后一个值分配给它。)

<强>更新

也许你的意思是这样的:

VredBajt

目前还不清楚是否希望函数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; } 为整个表返回单个值,或者为表中的每一行返回单个值。

上述实现假定您需要整个表的单个值。

因此,我必须从5更改为4,因为VredBajt最多只能存储32位(4 * 8)。

答案 1 :(得分:0)

VredBajt函数中的错误,你操纵传递的pb指针,但是一旦函数完成就没有效果。
在main中,pb是一个从未初始化且从未分配的整数,因此打印它会显示一个随机数。

如果必须转换包含0或1的整数数组,则可以将其移入一个新整数并打印出来。

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