solidity 将数字字符串转换为数字

solidity converting number strings to numbers

我正在编写一个整数字符串到整数值的转换器,这看起来应该很容易,因为字符串值是 0x30 ("0") 到 0x39 ("9 ”)。所以减去 0x30 并根据字符串中的位置乘以 10**exp 即可。 我只是不知道如何让十六进制 - int 转换工作, 特别是当我需要做数学部分时。如果有从 bytes1 到 int 或 uint 的转换会相对容易,但我似乎找不到。

这是我目前得到的结果,但在指示的行上出现编译错误。

uint  val=0;
bytes   memory stringBytes = bytes(numberString);
for (uint  i =  0; i<stringBytes.length; i++) {
   uint exp = stringBytes.length - i;
   bytes1 ival = stringBytes[i];
   bytes1 jval = ival - 0x30;
   
   val +=  (jval * (10**exp));  <--doesn't compile.
}
return val;

}

以防万一有人无意中发现这一点——这似乎适用于表示正整数的字符串。我认为扩展到像“-23.1”这样的字符串并不难。

function st2num(string memory numString) public pure returns(uint) {
        uint  val=0;
        bytes   memory stringBytes = bytes(numString);
        for (uint  i =  0; i<stringBytes.length; i++) {
            uint exp = stringBytes.length - i;
            bytes1 ival = stringBytes[i];
            uint8 uval = uint8(ival);
           uint jval = uval - uint(0x30);
   
           val +=  (uint(jval) * (10**(exp-1))); 
        }
      return val;
    }