【问题标题】:create array of int which is a bit field创建一个位域的 int 数组
【发布时间】:2016-07-08 11:48:05
【问题描述】:

我正在尝试创建一个数组,该数组在每个索引处都有一个位字段 我试过这段代码:

struct bitF {
    unsigned int x1:1;
           ...
    unsigned int xn:1;
}intBF;
typedef struct intBF *arr[];
int main(){
int i;
unsigned int *arr2[10]
for(i=0;i<sizeof(arr2)/sizeof(unsigned int);i++)
{   arr2[i] = malloc(sizeof(intBF));
    arr2[i] = (unsigned int *)(&intBF);
    arr[i].x5 = 3;}
return 0;}

但我从编译器中得到最后一行代码的错误。 我希望能够转到索引“n”处的数组并更改位值(不使用掩码)。编译器错误(虽然我认为它不相关)是:

错误:预期标识符或 '(' 在 '[' 标记之前

【问题讨论】:

  • 如果您的编译器出现错误,您应该将该错误复制/粘贴到您的问题中,以便其他人可以帮助您。您的倒数第二行还有一个_,这是不正确的语法。
  • 好吧,您的代码确实没有多大意义,而且格式错误。如果您想处理单个位,那么位域-struct 肯定不是一个好主意。作为一般规则,如果你真的不知道它的所有含义,就不要施放,接受它们并且(最重要的)真的必须这样做。另见How to Ask。重新编译器错误:我假设编译器在这里更好地知道什么是相关的,什么不是。它应该告诉你编译器确定你的代码是错误的。
  • 编译器错误(虽然我认为它不相关)编译器错误总是相关。全部。
  • 说真的......我知道我的代码非常错误......否则我不会问!!......我有一个任务,我需要创建类似汇编器的东西按位存储输入数据...我的大多数程序都可以正常工作,但是要将数据转换为位(将输入文件中的每一行编码为位):S:S 不适合我,我需要帮助,批评没有帮助我,所以我需要替代代码。
  • 主要问题是我需要做什么才能写出这样的行:arr[i].x=3; which x is a bit fields

标签: c arrays ansi bit-fields


【解决方案1】:

更优雅的解决方案:

#define SIZE 5
typedef struct {
    unsigned int x1:2;
       ...
    unsigned int xn:2;
}TYPE;
main()
{
    int i;
    unsigned int *p;
    TYPE *arrType = malloc(sizeof(TYPE)*SIZE);
    arrType[0].x2 = 1;
    arrType[1].x2 = 2;
    arrType[2].x2 = 3;
    for(i=0;i<SIZE;i++)
    {
        p = (unsigned int *)(&arrType[i]);
        printf("%d\n",*p);
    }
    free(arrType);
    return 0;
}

输出(如预期)是:

4
8
12
0
0

【讨论】:

  • 据我了解,而 [x1+...+xn] 大小的总和(在我的情况下为 [2+...+2])小于一个位的大小无符号整数,你只会得到一个整数,否则你会得到多个整数,而p是指向结构中第一个整数的指针。
【解决方案2】:

我通过反复试验找到了解决方案:))),

#define SIZE 5
struct bitF {
    unsigned int x1:2;
       ...
    unsigned int xn:2;
}intbf[SIZE];
main()
{
    int i;
    unsigned int *p[SIZE];
    for(i=0;i<SIZE;i++) 
    {
        p[i] = malloc(sizeof(intbf[i]));
        p[i] = (unsigned int *)(&intbf[i]); 
    }
    intbf[0].x2 = 3;
    for(i=0;i<SIZE;i++)
        printf("%d\n",*p[i]);
    return 0;
}

我得到了输出:

12
0
0
0
0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 2011-12-29
    • 1970-01-01
    • 2015-01-31
    相关资源
    最近更新 更多