相关疑难解决方法(0)

2454
推荐指数
25
解决办法
111万
查看次数

在1字节内存储8个逻辑真/假值?

我正在研发一个只有2KB SRAM的微控制器,并且迫切需要节省一些内存.试图找出如何使用位域将8 0/ 1值放入单个字节但不能完全解决的问题.

struct Bits
{
    int8_t b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1, b7:1;
};

int main(){
    Bits b;
    b.b0 = 0;
    b.b1 = 1;

    cout << (int)b.b0; // outputs 0, correct
    cout << (int)b.b1; // outputs -1, should be outputting 1
}
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?

c++ bit-fields

64
推荐指数
2
解决办法
3759
查看次数

如何从变量中访问特定的位组?

我有一个带有"x"位数的变量.如何提取特定的一组位,然后在C中处理它们?

c binary bit

8
推荐指数
2
解决办法
2万
查看次数

C/C++中的任意大小整数

  • 有没有办法使用c/c ++创建任意大小的整数?

例如:

int main(void) {
  Int i = Int(3); //3-bit integer
  i = 1; //Represented as: 001
}
Run Code Online (Sandbox Code Playgroud)

奖金

  • 有没有办法对浮动值做同样的事情?

c c++ integer

4
推荐指数
2
解决办法
4917
查看次数

C宏创建位域定义

问题

我正在做一些固件编码,并有很多位掩码来管理.到目前为止,我一直在为每个要掩盖的字段重复相同的块,如下所示:

#define LinkStateMask  0x1
#define LinkStateShift 8
#define LinkState(x)  (((x) >> LinkStateShift) & LinkStateMask)
Run Code Online (Sandbox Code Playgroud)

请注意,这些字段通常是多位字段,因此并不总是保证掩码0x1.最终的宏可以很容易地在代码中使用,这是我非常喜欢的:

if( LinkState(temp) == 0 ) {
    // Link is down, return error
    return -ENODEV;
}
Run Code Online (Sandbox Code Playgroud)

问题

有没有办法让C预处理器为我生成这些宏?我知道预处理器只能在一次通过中工作,所以宏不能直接定义另一个,但希望还有另一种方法.

理想情况下,我想写一些类似于以下内容的东西,并使用与上面第二个清单相同的C代码:

BIT_FIELD(LinkState, 8, 0x1)         // BIT_FIELD(name, lsb, mask)
Run Code Online (Sandbox Code Playgroud)

对我来说,关键是在主C文件中保留符号命名的函数式用法,而不必在BIT_FIELD(...)每次需要生成掩码时编写整个调用(其中一些字段被广泛使用,导致维护噩梦).

最后一个限制:我需要的字段稀疏地分散在数百个寄存器中.如果可能的话,我真的想避免struct为每个人定义一个,因为我通常只需要一个或两个字段.

c macros c-preprocessor

4
推荐指数
1
解决办法
1751
查看次数

结构中联合的位字段

我有这两种结构: - 1.

typedef struct bitfield
{
    unsigned int a:16;
    unsigned int b:17;
    union
    {    
        unsigned int c:4;
        unsigned int d:32;
    };
}bfield;
Run Code Online (Sandbox Code Playgroud)

这个结构有匿名联合,当我计算这个结构的大小时 - 它出来是12个字节(4 + 4 + 4).这可以.

2.

typedef struct bitfield
{
    unsigned int a:16;
    unsigned int b:17;
    union u
    {    
        unsigned int c:4;
        unsigned int d:32;
    };
}bfield;
Run Code Online (Sandbox Code Playgroud)

但我在32位机器上的DevC++编译器为这个结构的大小打印了8个字节.我不明白为什么它会出现8.

c bit-fields

2
推荐指数
1
解决办法
1880
查看次数

如何从C++中的二进制文件中读取一位?

我们正在做一些关于随机数的实验.给出的数据存储在.bin文件中,根据提供程序,它存储在独立的位中,也就是说,每个位都是假设的bool随机变量.

现在我想在程序中使用这个输入,但是当bool占用1个BYTE并且int占用4个字节时,我不知道如何将它读入C++中的变量.似乎ifstream.read(s,n)也只取n作为char的数量.

有没有办法从文件中读取位数据?谢谢!

c++ binary input

0
推荐指数
2
解决办法
4266
查看次数