首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式将日志数据(十六进制)转换为负十进制值

问以编程方式将日志数据(十六进制)转换为负十进制值
EN

Ethereum用户
提问于 2021-02-05 01:41:18
回答 1查看 663关注 0票数 0

我在转换Ethereum事务的日志数据中的负数时遇到了一些问题。在"0xffffffffffffffffffffffffffffffffffffffffffffffdb9a1221071741566a". (日志索引192 )中,主题3被列为这笔交易。

特克斯将该十六进制值转换为小数-671.4275583814931。

我正在努力复制十六进制值到负十进制值的转换。迄今为止:

  1. 我在Ethers.js和Web3.js库中找不到转换到适当数量的任何函数。
  2. 即使仅仅使用一个115792089237316195423570985008687907853269984665640564038786156449531636569706,,十六进制值也会产生一个不正确的在线工具输出。

是否有任何库可以将此十六进制值转换为正确的负值小数点?

EN

回答 1

Ethereum用户

发布于 2022-11-29 23:59:47

你从妖术转换中得到的大量数字是正确的。但是,您必须考虑到实体中的整数溢出。

事务日志中的原始值为int256类型。如果将115792089237316195423570985008687907853269984665640564038786156449531636569706转换为int256类型,则得到-671427558381493070230。然后用18个小数,结果是-671.427558381493070230。

在Python中,您可以使用以下代码获得一个int256:

代码语言:javascript
复制
large_number = 115792089237316195423570985008687907853269984665640564038786156449531636569706

size = 256
sign = 1 << size - 1

number_int256  = (large_number & sign-1) - (large_number & sign)
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/93148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档