正在将代码段从C++转换为C#
Converting code segment from C++ to C#
我正试图将这段c++代码转换为c#:
if (latch_state & 0x1) {
MC->setPin(AIN2pin, HIGH);
} else {
MC->setPin(AIN2pin, LOW);
}
if (latch_state & 0x2) {
MC->setPin(BIN1pin, HIGH);
} else {
MC->setPin(BIN1pin, LOW);
}
if (latch_state & 0x4) {
MC->setPin(AIN1pin, HIGH);
} else {
MC->setPin(AIN1pin, LOW);
}
if (latch_state & 0x8) {
MC->setPin(BIN2pin, HIGH);
} else {
MC->setPin(BIN2pin, LOW);
}
我知道如何将MC->setPin(PinNum, state)
转换为MC.setPin(pinNum, state)
,所以它们不是问题,但我对if语句会变成什么样子感到困惑。
latch_state
的类型是uint8_t
,但它似乎像字节一样被处理(这就是我试图将其转换为的),而0x1
似乎也是字节。
那么,在if语句中,二进制和运算将如何求值呢?
对于转换,我应该做吗
if ((latch_state & 0x1) == 0x0)
或if ((latch_state & 0x1) != 0x0)
或完全不同的东西?
if ((latch_state & 0x1) != 0)
应该起作用。通常,不计算为布尔值的C++条件与0进行隐式比较,"true"表示表达式不是0。
实际上,十六进制数字0x8、0x4、0x2、0x1是二进制的1000010000100001。你的代码中使用的方式让我想起了口罩。它们的唯一目的是"关闭"原始字节的所有位,除了"打开"的位。例如:
如果"锁存状态==0x1",则只有第一个条件为真。
在你提供的两个答案中,我认为第二个是对的。您需要得到的数字不为0。然而,if语句不是这样做的吗?
我希望这能帮助…:D
要在不重新排序if块的情况下直接转换,您可以使用第二个选项:
if ((latch_state & 0x1) != 0x0)
如果设置了该位,则结果将为非零,其计算结果为逻辑真值。所以你想测试结果是否为零。以上内容相当于C或C++中的此语句:
if (latch_state & 0x1)
顺便说一下,根据你所说的其他内容,将任何8位无符号整数视为"字节"是很正常的。因此,不要担心可能发生的任何"转换"。这是一样的事情。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 将无符号char*转换为std::istream*C++