c ++ (u256) * (h256 const *) (char * [] + int) приведение переписывания к Java - PullRequest
0 голосов
/ 24 августа 2018

Мне нужно переписать некоторый код с c ++ на java, и у меня возникли проблемы с таким кодом c ++:

using u256 = boost::multiprecision::number<boost::multiprecision::cpp_int_backend<256, 256, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void>>;
using h256 = FixedHash<32>;
using bytes = std::vector<byte>;

uint32_t offset = ...;
bytes m_data = ...;
u256 result;
result = (u256)*(h256 const*)(m_data.data() + (size_t)offset);

Я понятия не имею, что происходит и как мне переписать его в Javaкод.Я понял, что сначала мы сделали и сместили, а теперь наведем указатель на некоторый элемент массива m_data, а затем приведем к массиву типа h256 (я наблюдал отладку, и это приведение сделало следующее: мы получаем данные от 0 до смещения от m_dataи затем приводим к массиву размером 32 с ведущими нулями. И затем мы получаем первое значение (я не уверен в этом) этого массива и приводим к u256?Но первое значение после (h256 const *) приведения равно нулю, но в любом случае результирующее значение не равно нулю.У тебя есть идеи?

1 Ответ

0 голосов
/ 24 августа 2018

Я не знаю, что такое u256, и вопрос пропускает typedef, но это типичный способ в C получить скалярный тип (int16_t, int32_t, int64_t, double ....) из буфера в память.

По сути, использование синтаксиса:

type t = (type)*(const type *)(buffer + offset)

... позволяет получить объект определенного типа из байтового массива, начиная с определенного индекса.

Это не очень безопасно, но быстро преобразуется при преобразовании в сборку!

ПРИМЕЧАНИЕ : математика указателя зависит от объявления "buffer", если его int8_t *, например, буфер будет получен из байта "offset", если его int32_t *, он будет использоваться из "смещения * 4" -го байта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...