跳转到内容

类型转换

本页展示了在原始类型之间进行转换以及从复合类型中获取这些类型的示例。

IntString

如何将 “字符串 “转换为 “整数

// 为 String 类型定义一个新的扩展函数,返回 Int 类型的值
// 注意:当 String 包含非数字字符时,会产生意想不到的结果!
extends fun toInt(self: String):Int {
// 将 String 转换为 Slice 用于解析
let stringSlice = self.asSlice();
// 一个用于存储累积数字的变量
let acc: Int = 0;
// 循环直到 String 为空
while (!string.empty()) {
let charInt = string.loadUint(8); // 从 Slice 中加载 8 位(1 个字节)
acc = (acc * 10) + (char - 48); // 使用 ASCII 表获取数值
// 注意,当起始字符串包含非数字字符时,这种方法会产生意想不到的结果
// 如果起始字符串包含非数字字符时,这种方法会产生意想不到的结果!
}
// 产生结果数字
return acc;
}
fun runMe() {
let stringString = "26052021";
dump(string.toInt());
}

如何将 Int 转换为 String 字符

let number: Int = 261119911;
// 将 [number] 转换为字符串
let numberStringString = number.toString();
// 将 [number] 转换为浮点字符串,
// 其中传递的参数 3 是结果浮点字符串的指数 10^(-3),
// 它可以是 0 到 76 之间的任何整数,包括两端
let floatStringString = number.toFloatString(3);
// 将作为硬币的[数字]转换为人类可读的字符串
let coinsStringString = number.toCoinsString();
dump(numberString); // "261119911"
dump(floatString); // "261119.911"
dump(coinsString); // "0.261119911"

StructMessageCellSlice

如何将任意 “结构 “或 “消息 “转换为 “单元 “或 “片”?

struct Profit {
bigString?;
dict: map<Int, Int as uint64>;
energy: Int;
}
message(0x45) Nice {
maybeStrString?;
}
fun convert() {
let st = Profit{
big: null,
dict: null,
energy: 42,
};
let msg = Nice{ maybeStr"今天的消息!"};
st.toCell();
msg.toCell();
st.toCell().asSlice();
msg.toCell().asSlice();
}

如何将 “单元格 “或 “切片 “转换为任意的 “结构 “或 “消息”?

struct Profit {
bigString?;
dict: map<Int, Int as uint64>;
energy: Int;
}
message(0x45) Nice {
maybeStrString?;
}
fun convert() {
let stCell = Profit{
big: null,
dict: null,
energy: 42,
}.toCell();
let msgCell = Nice{ maybeStr"今日消息!"}.toCell();
Profit.fromCell(stCell);
Nice.fromCell(msgCell);
Profit.fromSlice(stCell.asSlice());
Nice.fromSlice(msgCell.asSlice());
}