C++ 将uint_8更改为二进制1 MSB的x倍

C++ 将uint_8更改为二进制1 MSB的x倍,c++,hardware,C++,Hardware,我正在为我的学校项目编写一个Max72xx库,我找到了一种使用数据表附带的寄存器设置列的方法。现在,我也找到了一种方法来设置它们的高度。因此,我创建了一个具有两个参数的函数:行,它基本上将x轴发送到芯片,高度设置y轴 我在这段代码中所做的基本上如下所示: 用户将x轴设置在1和8之间(参数const uint8\u t&row) 用户将y轴设置在1和8之间(参数uint8\u t height) 我希望实现以下目标: 如果高度设置为三:应创建以下位模式:1110 000。或者,如果用户使用8

我正在为我的学校项目编写一个Max72xx库,我找到了一种使用数据表附带的寄存器设置列的方法。现在,我也找到了一种方法来设置它们的高度。因此,我创建了一个具有两个参数的函数:
,它基本上将x轴发送到芯片,高度设置y轴

我在这段代码中所做的基本上如下所示:

  • 用户将x轴设置在1和8之间(参数
    const uint8\u t&row
  • 用户将y轴设置在1和8之间(参数
    uint8\u t height

我希望实现以下目标:

  • 如果
    高度设置为三:应创建以下位模式:
    1110 000
    。或者,如果用户使用8,我希望函数创建
    1111111
    。或者,如果用户将5设置为y轴,我希望Fuctin创建
    1111 1000
    ,等等的位模式
我提供的代码如下(这段代码在function setColumn中):

if(高度>=1&&height i)&1)
计数器++;
否则就断了;
}

模式只有8种模式?我只需要定义一个
const
数组:

```
static const uint8_t patterns[] = {
  0x10000000,
  0x11000000,
  0x11100000,
  0x11110000,
  0x11111000,
  0x11111100,
  0x11111110,
  0x11111111,
};

if (height >= 1 && height <=8)
  return patterns[height - 1];

// raise an exception or so
```
静态常数8_t模式[]={
0x10000000,
0x11000000,
0x11100000,
0x11110000,
0x11111000,
0x11111100,
0x11111110,
0x11111111,
};
如果(高度>=1&&height只需使用此选项:

uint8_t pattern = (0xff00u >> height);
或者这个:

uint8_t pattern = (0xffu << (8 - height));

uint8\U t pattern=(0xffu Yes仅8个模式。芯片有8x8像素,因此无需创建uint16\U t或更多,因为我没有对芯片进行菊花链接。不过,您的答案比我预期的简单得多,谢谢。U代表什么?后缀
U
表示未签名。
uint8_t pattern = (0xffu << (8 - height));