string_to_num

以下示例将数字字符串转换成数字,若遇到非数字的字符,将提前结束转换。

  • string_2_num
module cookbook::string_2_num {
    public fun string_to_num(bytes: vector<u8>): u64 {
        let mut num: u64 = 0;

        let len = bytes.length();
        let mut idx = 0;

        while (len - idx > 0) {

            // ASCII value of 0 is 48, ASCII value of 9 is 57
            if (bytes[idx] >= 48 && bytes[idx] <= 57) {
                num = num * 10 + ((bytes[idx] - 48) as u64);
            } else {
                break // Stop parsing when encountering a non-digit character
            };

            idx = idx + 1;
        };

        num
    }
}
  • string_2_num_tests
module cookbook::string_2_num_test {
    use cookbook::string_2_num::{string_to_num};

    #[test_only]
    use sui::test_utils::assert_eq;

    #[test]
    fun test_string_2_num() {
        let bytes = b"123456789";
        let num = string_to_num(bytes);
        assert_eq(num, 123456789);

        let bytes = b"123456789123456789";
        let num = string_to_num(bytes);
        assert_eq(num, 123456789123456789);

        let bytes = b"123456789ABCD";
        let num = string_to_num(bytes);
        assert_eq(num, 123456789);
    }
}