如何在 Go 中将常量设置为负值



我正在用Go编写代码来调用一些Windows信任和加密dll来验证文件签名。wincrypt.h 中有许多常量,我试图逐字移植,但我遇到了一些整数溢出问题。

例如,可以从 WinVerifyTrust 返回的所有错误代码都是负值。如果我举一个例子,TRUST_E_NOSIGNATURE,这在winerror.h中定义如下:#define TRUST_E_NOSIGNATURE _HRESULT_TYPEDEF_(0x800B0100L)。在我的 Go 代码中,我有const TRUST_E_NOSIGNATURE = int32(0x800B0100)但在编译时错误是:

常2148204800溢出 int32

当我真的期望值是 -2146762496

所以,我的问题 1( 为什么它不像其他语言那样包装 2( 无论如何,是否让常量仍然使用数字的十六进制表示形式,或者我是否必须将代码更改为 const TRUST_E_NOSIGNATURE = int32(-2146762496) 这工作正常,但需要我在我移植的许多其他常量中进行此更改?

你只需设置它:

const TRUST_E_NOSIGNATURE = int32(-2146762496)

如果您愿意,请使用十六进制:

const TRUST_E_NOSIGNATURE = int32(-0x7ff4ff00)

但为此,您可能只是使用了错误的数据类型。请改用 uint32

const TRUST_E_NOSIGNATURE = uint32(0x800B0100)

为什么它不像其他语言那样换行?

因为它不是这样设计的。围棋遵循尽可能明显和直观的哲学。静默包装非常不直观。

相关内容

  • 没有找到相关文章

最新更新