C++ (U256)*(H256 const*)(char*[] + int) 将重写转换为 Java

c++ (u256)*(h256 const*)(char*[] + int) cast rewriting to java

本文关键字:int 重写 Java 转换 H256 U256 const char C++      更新时间:2023-10-16

我需要将一些代码从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*( 强制转换后的第一个值为零,但无论如何结果值不是零。 你有什么想法吗?

我不知道u256是什么,这个问题错过了typedef,但这是C中从内存缓冲区获取标量类型(int16_t,int32_t,int64_t,双精度...(的典型方法。

本质上是语法的使用:

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

。允许您从从特定索引开始的字节数组中获取特定类型的对象。

它不是很安全,但转换为组装时速度很快!

注意:指针数学取决于"buffer"的声明,如果它是int8_t*,例如缓冲区将从"偏移量"-n字节获取,如果它是int32_t*,它将从"偏移量* 4"-n字节中使用。