首页 > 解决方案 > 如何访问和使用函数中获取参数为 void * 类型的单个位?

问题描述

我需要计算某种数字参数(未知类型)中有多少个“1”位。计算位的函数得到一个 void *。当我不知道参数的类型时,如何访问每个位?

*******编辑******* 我得到一个未知类型参数的数组,需要计算所有单元格中的所有点亮位。我正在尝试做的,但不起作用:

int my_count(void *arr[],int size){
    int i=0,j=0,lit_bits=0,size_each_cell=0;
    unsigned char *ptr=(char*)arr;
    size_each_cell= sizeof(arr[0]);
    for (i=0;i<size;i++){
        for(j=0;j<NUM_OF_BITS*size_each_cell;j++){
            if(ptr[j]==1){
                lit_bits++;
            }
            ptr=ptr+1;
        }
    }
    return lit_bits;
}

int main(){
    int size,i;
    int arr[SIZE_OF_ARRAY]={1,0,0,1,1,2,3};
    printf("number of lit bits is: %d",my_count(arr,SIZE_OF_ARRAY));
}

标签: cpointersbitvoid

解决方案


设法解决了这个问题,这是一个工作代码:

#include <stdio.h>
#include <stdlib.h>
#define NUM_OF_BITS 8
#define SIZE_OF_ARRAY 8

int my_count(void *arr,int length_array,int size_in_bytes){
    int i=0,j=0,k=0,lit_bits=0;
    const unsigned char *ptr=arr;
    for (i=0 ; i<length_array ; i++){
        for(j=0;j<size_in_bytes;j++,ptr++){
            for (k = 0; k <NUM_OF_BITS; k++) {
                if( *ptr & (1<<k)){
                    lit_bits++;
                }
            }
        }
    }
    return lit_bits;
}

int main(){
    int size_in_bytes;
    int arr[SIZE_OF_ARRAY]={1,0,0,1,1,2,3,7};
    size_in_bytes= sizeof(arr[0]);
    printf("number of lit bits is: %d",my_count(arr,SIZE_OF_ARRAY,size_in_bytes));
}

推荐阅读