Существует поле данных uint64_t, отправленное узлом связи, оно содержит идентификатор заказа, который мне нужно сохранить в базе данных Postgresql-11, которая НЕ поддерживает целочисленные типы без знака. Хотя реальные данные могут превышать 2 ^ 63, я думаю, что INT8
, зарегистрированный в Postgresql11, может их хранить, если я тщательно проведу приведение.
Допустим, есть:
uint64_t order_id = 123; // received
int64_t to_db; // to be writed into db
Я планирую использовать один из следующих методов для преобразования значения uint64_t в значение int64_t:
to_db = order_id;
// прямое присвоение;to_db = (int64_t)order_id;
//приведение в стиле c;to_db = static_cast<int64_t>(order_id);
to_db = *reinterpret_cast<const int64_t*>( &order_id );
и когда мне нужно загрузить его из БД, я могу сделать обратное литье.
Я знаю, что все они работают, мне просто интересно, какой из них лучше всего соответствует стандарту C++.
Другими словами, какой метод всегда будет работать на любой 64-битной платформе с любым компилятором?
Спасибо!!!
memcpy(&to_db, &order_id, 8);
. - person Daniel Langr   schedule 02.12.2020