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

Solidity中OpenZeppelin的uint转string代码里数字48的含义是什么

关于OpenZeppelin uint256转string代码的疑问解答

先贴出关键代码段:

function toString(uint256 value) internal pure returns (string memory) {
    if (value == 0) {
        return "0";
    }
    uint256 temp = value;
    uint256 digits;
    while (temp != 0) {
        digits++;
        temp /= 10;
    }
    bytes memory buffer = new bytes(digits);
    while (value != 0) {
        digits -= 1;
        buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
        value /= 10;
    }
    return string(buffer);
}

核心表达式解析:bytes1(uint8(48 + uint256(value % 10)))

这个表达式的作用是把数字的单个十进制位转换成对应的ASCII字符,拆解来看:

  • value % 10:提取当前value的最后一位十进制数字(例如value=123时,结果为3)
  • 48是ASCII编码中字符'0'的十进制值。ASCII表中数字字符'0'到'9'的编码是连续的:'0'=48、'1'=49……'9'=57。因此用48 + 数字就能得到对应数字字符的ASCII码(比如3+48=51,对应字符'3')
  • uint8(...):将计算结果转为uint8类型——ASCII编码范围是0-127,完全适配uint8的取值区间(0-255)
  • bytes1(...):将uint8值转为bytes1类型,因为存储字符的buffer是bytes数组,每个元素都是单个字节(bytes1)

这段循环会从数字的末尾开始,逐位转换为ASCII字符并填充到bytes数组的对应位置,最终将整个bytes数组转为string返回。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:48:23