作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以简化此语句?
如果我使用 case 语句和 while 循环,效果是相同的。
void decode (unsigned char* msg) {
if (strstr (msg, "DO=0x00") != NULL) // 0
{
//00000
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x01") != NULL)// 1
{
//00001
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x02") != NULL)// 2
{
//00010
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x03") != NULL)// 3
{
//00011
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x04") != NULL)// 4
{
//00100
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x05") != NULL)// 5
{
//00101
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x06") != NULL)// 6
{
//00110
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x07") != NULL)// 7
{
//00111
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x08") != NULL)// 8
{
//01000
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x09") != NULL)// 9
{
//01001
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x0A") != NULL)// 10
{
//01010
LATGbits.LATG1 = 1 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 ON
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x0B") != NULL)// 11
{
//01011
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x0C") != NULL)// 12
{
//01100
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x0D") != NULL)// 13
{
//01101
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x0E") != NULL)// 14
{
//01110
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x0F") != NULL)// 15
{
//01111
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 1 ; //DO5 OFF
}
else if (strstr (msg, "DO=0x10") != NULL)// 16
{
//10000
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 0 ; //DO5 O1
}
else if (strstr (msg, "DO=0x11") != NULL)// 17
{
//10001
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x12") != NULL)// 18
{
//10010
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x13") != NULL)// 19
{
//10011
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x14") != NULL)// 20
{
//10100
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x15") != NULL)// 21
{
//10101
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x16") != NULL)// 22
{
//10110
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x17") != NULL)// 23
{
//10111
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 1 ; //DO4 OFF
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x18") != NULL)// 24
{
//11000
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x19") != NULL)// 25
{
//11001
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x1A") != NULL)// 26
{
//11010
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x1B") != NULL)// 27
{
//11011
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 1 ; //DO3 OFF
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x1C") != NULL)// 28
{
//11100
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x1D") != NULL)//29
{
//11101
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x1E") != NULL)// 30
{
//11110
LATGbits.LATG1 = 0 ; //DO1 OFF
LATGbits.LATG0 = 1 ; //DO2 OFF
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
else if (strstr (msg, "DO=0x1F") != NULL)// 31
{
//11111
LATGbits.LATG1 = 1 ; //DO1 ON
LATGbits.LATG0 = 0 ; //DO2 ON
LATGbits.LATG13 = 0 ; //DO3 ON
LATGbits.LATG14 = 0 ; //DO4 ON
LATGbits.LATG12 = 0 ; //DO5 ON
}
}
上面的代码显示,当在 super 终端中写入该字时,它会对 LED 进行一些操作。例如,DO=0x1F 将打开所有五个 LED。因为,基于0x1F的二进制是IIIIII(5-Bit)。有什么方法可以使用 Bitwise 函数简化代码吗?
最佳答案
我不会为您编写代码,但解决问题的方法如下:
int
。msg
并提取十六进制值 (0x00 - 0x1F
) 作为 int
。int
)LATGbits
结构成员。关于c - 如何将 if else 代码最小化为按位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32430529/
出于好奇,我尝试了一些原型(prototype)制作,但似乎只允许在第一个位置使用子例程的原型(prototype) &。 当我写作时 sub test (&$$) { do_somethin
我需要开发一个类似于 Android Play 商店应用程序或类似 this app 的应用程序.我阅读了很多教程,发现几乎每个教程都有与 this one 类似的例子。 . 我已经开始使用我的应用程
考虑一个表示“事件之间的时间”的列: (5, 40, 3, 6, 0, 9, 0, 4, 5, 18, 2, 4, 3, 2) 我想将这些分组到 30 个桶中,但桶会重置。期望的结果: (0, 1,
我是一名优秀的程序员,十分优秀!