如何在 Rust 代码中表示 C 的"unsigned negative"值?



我正在使用winapi crate从Rust调用ResumeThreadWinAPI函数。

文档说:

如果函数成功,则返回值是线程以前的挂起计数。

如果函数失败,则返回值为 (DWORD( -1。

如何有效地检查是否存在错误?

在 C 语言中:

if (ResumeThread(hMyThread) == (DWORD) -1) {
// There was an error....
}

在 Rust 中:

unsafe {
if ResumeThread(my_thread) == -1 {
// There was an error....
}
}
the trait `std::ops::Neg` is not implemented for `u32`

我理解这个错误;但是在语义上与C代码相同的最佳方式是什么?对照std::u32::MAX检查?

在 C 中,(type) expression称为类型转换。在 Rust 中,您可以使用as关键字执行类型转换。我们还为文字提供了一个显式类型:

if ResumeThread(my_thread) == -1i32 as u32 {
// There was an error....
}

我个人会使用std::u32::MAX,可能会重命名,因为它们是相同的值:

use std::u32::MAX as ERROR_VAL;
if ResumeThread(my_thread) == ERROR_VAL {
// There was an error....
}

另请参阅:

  • 如何安全且习惯地在数值类型之间进行转换?
  • 整数之间的转换贵吗?
  • From::from 和 as 在 Rust 中有什么区别?
  • 在 Rust 中,"as"是一个运算符吗?
  • 如何在 Rust 中将布尔值转换为整数?

是的,要么std::u32::MAX,要么!0u32(相当于 C~0UL,它强调了它是给定类型的全位设置值的事实(。

最新更新