You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Solidity中将bytes1转换为int?代码报错求助

Solidity中bytes1转int类型的解决方案

你遇到的报错:

TypeError: Explicit type conversion not allowed from "bytes1" to "int8"

原因是Solidity不允许直接将无符号的bytes1类型转换为有符号的int8类型。bytes1本质是8位无符号整数,必须先转换为对应的无符号整数类型(比如uint8),再转换为有符号类型。

修正后的代码如下:

int256[] public C;

function setVal(string memory C_) public returns(int256[] memory ret1) {
    bytes memory b = bytes(C_);
    for (uint i = 0; i < b.length; i++) {
        if (b[i] >= 0x30 && b[i] <= 0x39) {
            // 先转uint8再转int256,减去48得到数字值
            C.push(int256(uint8(b[i])) - 48);
        }
    }
    return C;
}

关键说明

  • bytes1和uint8是等价的底层类型,所以可以直接转换
  • 转换为uint8后,再转为int256(或其他有符号类型),就能安全完成跨符号类型的转换
  • 减去48是因为字符'0'-'9'的ASCII码是0x30-0x39(对应十进制48-57),减去48后得到对应的整数0-9

如果需要更清晰的分步写法,也可以拆成两行:

uint8 digitUint = uint8(b[i]);
int256 digitInt = int256(digitUint) - 48;
C.push(digitInt);

内容的提问来源于stack exchange,提问作者SpaceNinja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 16:44:58