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;
}
我正在编写一个整数字符串到整数值的转换器,这看起来应该很容易,因为字符串值是 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;
}