这在 C# 中意味着什么以及如何使用它
What does this mean in C# and how can I use it?
我在 IDA Pro 中查看C++中有以下代码:
__int64 __fastcall sub_14023B480(__int64 a1)
{
return *(_DWORD *)(a1 + 0x384) > 0 && !(*(_BYTE *)(a1 + 0xE8) & 8) && !(*(_DWORD *)(a1 + 0x290) & 0x800000);
}
a1
是一个实体。
0x384
指向健康值。
0xE8
和0x290
指向某种标志,但是为什么我不能在 C# 中编写这样的检查:
if(!(a1 + 0xE8) & 8)
{
//Do something
}
因为在 C# 中,&
运算符返回 int 值。
在 C# 中,! 运算符不能应用于这样的非布尔类型 - 众所周知,这一事实会让 C 和 C++ 程序员感到惊讶。
要修复您的标志检查,您可以写
if (((a1 + 0xE8) & 8) == 0)
{
//Do something
}
由于运算符优先级,所有括号都是必需的。如果没有"中间"括号,"8 == 0"将在 & 之前计算,并导致另一个编译器错误,"运算符 & 不能应用于 int 和 bool"。
相关文章:
- 我应该使用什么来代替void作为变体中的替代类型之一
- 无论我使用什么,我的输入都会被跳过
- 我可以使用什么来停止循环而不是"返回 0"?
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 通常使用什么方法来检测时间情况?
- 使用什么代替"静态常量 TCHAR *"
- 在从 C++ 转换为 C# 的代码中,我应该使用什么而不是 memcpy?
- 我应该使用什么信号来终止/终止Windows上的应用程序
- 计算机使用什么方法添加无符号整数
- 我可以为这些特定函数使用什么C++标头?Linux
- 使用什么设计模式来收集项目?
- 在 c++ 上,您通常使用什么 int 值、'255' 和十六进制值'0xff'?
- 多次对容器进行排序,使用什么容器和什么方法
- 使用什么 std::可选 or std::unique_ptr
- 当您希望在Arduino Uno编程中同时执行不同函数时,使用什么代码/语句
- 使用此字符串重新格式化器使用什么代替 substr
- 使用什么作为 end() 迭代器C++?
- 操纵器,C 我应该使用什么顺序
- JNI:返回用户定义的Java类时要使用什么签名
- C 中的属性列表中应该使用什么