【发布时间】:2021-06-17 19:56:18
【问题描述】:
在 Arduino 中,我试图将来自两个 PISO(并行输入 - 串行输出)移位寄存器的 8 位二进制数字/字符串组合成一个 16 位二进制字符串。使用 Arduino switchVar1 = shiftIn(dataPin, clockPin); 上的 shiftIn() 命令存储在变量 (switchVar1) 中的二进制数
switchVar1 最初由byte switchVar1 = 72; 定义。
我这样做是为了然后我可以使用 switch() 函数读取二进制字符串并进行不同的组合,因为我有 16 个触点/按钮,其中将定义所有 16 个按钮的不同组合,所以我需要一个 16 位的字符串二进制数。
基本上,我问的是如何将两个 8 位二进制数数组变成一个数组。
请记住,我对 c++ 完全陌生,所以可能有一些我可能没有想到的基本解决方案。
【问题讨论】:
-
类似
unsigned char src[2]; unsigned int dst; dst = ((unsigned int)src[0] << 8) | src[1];? -
@MikeCAT 你不应该使用
uint16_t而不是 unsigned int 吗? -
两个输入的类型是
byte,需要的输出类型是什么?std::uint16_t? -
@AndyG 我看到的唯一 UB 是
src[2]是否未初始化。如果unsigned int超过 16 位,uint16_t会减少空间浪费。 -
@AndyG 我在这个 sn-p 中没有看到任何违反严格别名规则的行为。
标签: c++ arrays arduino c-strings shift-register