C++ (U256)*(H256 const*)(char*[] + int) 将重写转换为 Java
c++ (u256)*(h256 const*)(char*[] + int) cast rewriting to java
我需要将一些代码从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字节中使用。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 为什么在全局范围内使用"extern int a"似乎不行?
- int(c) 和 c-'0' 之间的区别。C++
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- 是否可以从int转换为enum类类型
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 'short int'持有的值溢出,但"自动"不会溢出?
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 调用'begin(int [n])'没有匹配函数
- 没有显式声明的int[]中的foreach
- 在c++中访问int到类对象的映射时出错
- 为什么我无法更改"set<set>"循环中的值<int>
- 长 长 int 不要 长 int 好
- C++程序在循环后给出奇怪的int值
- C++ (U256)*(H256 const*)(char*[] + int) 将重写转换为 Java