Стандарт C++ гарантирует следующее:
static_cast
луг указатель на и от void*
сохраняет адрес. Таким образом, в следующем, a
, b
и c
вся точка к тому же адресу:
int* a = new int();
void* b = static_cast<void*>(a);
int* c = static_cast<int*>(b);
reinterpret_cast
только гарантии, что при кастинге указателя на другой тип, и затем reinterpret_cast
это назад к исходному типу , Вы получаете исходное значение. Таким образом в следующем:
int* a = new int();
void* b = reinterpret_cast<void*>(a);
int* c = reinterpret_cast<int*>(b);
a
и c
содержат то же значение, но значение [1 111] является неуказанным. (на практике это будет обычно содержать тот же адрес как [1 112] и c
, но это не указано в стандарте, и это не может быть верно на машинах с более сложными системами памяти.)
Для кастинга к и от [1 114], static_cast
должен быть предпочтен.
Да, можно. В Python 2.4 появился модуль SHA-1, который делает именно это. См. документацию .
Однако имейте в виду, что импорт кода из этого модуля вызовет DeprecationWarnings при запуске с более новым Python.
Хорошо, поскольку требования были ужесточены до SHA-256 с использованием модуля SHA-1 в стандартной библиотеке недостаточно. Я бы посоветовал проверить pycrypto , он имеет реализацию SHA-256. Существуют также двоичные версии Windows, соответствующие старым Pythons, следуйте ссылкам со старой страницы PyCrypto Эндрю Кучлингса .
Вы можете использовать модуль sha
, если вы хотите сохранить совместимость, вы можете импортировать его следующим образом:
try:
from hashlib import sha1
except ImportError:
from sha import sha as sha1