Как установить постоянную на отрицательное значение в Go - PullRequest
0 голосов
/ 11 июня 2019

Я пишу код на Go, чтобы вызвать некоторые из доверенных файлов Windows и crypt для проверки подписей файлов.В 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), который работает нормально, но потребует от меня внесения этого изменения во многие другие перенесенные мной константы?

1 Ответ

2 голосов
/ 11 июня 2019

Вы просто установили его:

const TRUST_E_NOSIGNATURE = int32(-2146762496)

Используйте гекс, если хотите:

const TRUST_E_NOSIGNATURE = int32(-0x7ff4ff00)

Но для этого вы, вероятно, просто используете неверный тип данных. Вместо этого используйте uint32:

const TRUST_E_NOSIGNATURE = uint32(0x800B0100)

почему он не переносится, как на других языках?

Потому что это не было разработано таким образом. Go следует философии быть как можно более очевидным и интуитивным. Тихая упаковка очень неинтуитивна.

...