c ++(u256)*(h256 const *)(char * [] + int)强制重写为Java

时间:2018-08-24 10:26:03

标签: java c++ casting

我需要将一些代码从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 :(得分:0)

我不知道u256是什么,并且这个问题缺少typedef,但这是C语言中从缓冲区中获取标量类型(int16_t,int32_t,int64_t,double ....)的典型方法。记忆。

基本上是语法的使用:

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

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

它不是很安全,但是转换为汇编时会燃烧得很快!

注意:指针数学取决于“缓冲区”的声明,如果它是int8_t *,则实例缓冲区将从“偏移量”第n个字节获取,如果它是int32_t *,则它将从“偏移量* 4”的第n个字节开始使用。