num_to_string

以下示例将数字转换成字节数组,再通过调用to_ascii_string()方法转换成数字字符串。

  • num_2_string
module cookbook::num_2_string {
    public fun u8_to_string(num: u8): vector<u8> {
        return num_to_string(num as u64)
    }

    public fun u16_to_string(num: u16): vector<u8> {
        return num_to_string(num as u64)
    }

    public fun u32_to_string(num: u32): vector<u8> {
        return num_to_string(num as u64)
    }

    public fun u64_to_string(num: u64): vector<u8> {
        return num_to_string(num)
    }

    public fun num_to_string(mut num: u64): vector<u8> {
        if (num == 0) {
            return b"0"
        };

        let mut bytes = vector::empty<u8>();
        while (num > 0) {
            let remainder = num % 10;                               // get the last digit
            num = num / 10;                                         // remove the last digit
            vector::push_back(&mut bytes, (remainder as u8) + 48);  // ASCII value of 0 is 48
        };

        vector::reverse(&mut bytes);
        return bytes
    }
}
  • num_2_string_tests
module cookbook::num_2_string_test {
    use cookbook::num_2_string::{u8_to_string, u16_to_string, u32_to_string, u64_to_string};

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

    #[test]
    fun test_num_2_string() {
        let num: u8 = 255;
        let output = u8_to_string(num);
        assert_eq(output.to_ascii_string(), b"255".to_ascii_string());

        let num: u16 = 12345;
        let output = u16_to_string(num);
        assert_eq(output.to_ascii_string(), b"12345".to_ascii_string());

        let num: u32 = 123456789;
        let output = u32_to_string(num);
        assert_eq(output.to_ascii_string(), b"123456789".to_ascii_string());

        let num: u64 = 123456789123456789;
        let output = u64_to_string(num);
        assert_eq(output.to_ascii_string(), b"123456789123456789".to_ascii_string());
    }
}