Skip to content

Type conversion

This page shows examples of converting between primitive types and obtaining them from composite types.

IntString

How to convert a String to an Int

// Defining a new extension function for type String that returns value of type Int
// Caution: produces unexpected results when String contains non-numeric characters!
extends fun toInt(self: String): Int {
// Cast the String as a Slice for parsing
let string: Slice = self.asSlice();
// A variable to store the accumulated number
let acc: Int = 0;
// Loop until the String is empty
while (!string.empty()) {
let char: Int = string.loadUint(8); // load 8 bits (1 byte) from the Slice
acc = (acc * 10) + (char - 48); // using ASCII table to get numeric value
// Note, that this approach would produce unexpected results
// when the starting String contains non-numeric characters!
}
// Produce the resulting number
return acc;
}
fun runMe() {
let string: String = "26052021";
dump(string.toInt());
}
▶️ Open in Web IDE

How to convert an Int to a String

let number: Int = 261119911;
// Converting the [number] to a String
let numberString: String = number.toString();
// Converting the [number] to a float String,
// where passed argument 3 is the exponent of 10^(-3) of resulting float String,
// and it can be any integer between 0 and 76 including both ends
let floatString: String = number.toFloatString(3);
// Converting the [number] as coins to a human-readable String
let coinsString: String = number.toCoinsString();
dump(numberString); // "261119911"
dump(floatString); // "261119.911"
dump(coinsString); // "0.261119911"
▶️ Open in Web IDE

Struct or MessageCell or Slice

How to convert an arbitrary Struct or Message to a Cell or a Slice

struct Profit {
big: String?;
dict: map<Int, Int as uint64>;
energy: Int;
}
message(0x45) Nice {
maybeStr: String?;
}
fun convert() {
let st = Profit{
big: null,
dict: null,
energy: 42,
};
let msg = Nice{ maybeStr: "Message of the day!" };
st.toCell();
msg.toCell();
st.toCell().asSlice();
msg.toCell().asSlice();
}
▶️ Open in Web IDE

How to convert a Cell or a Slice to an arbitrary Struct or Message

struct Profit {
big: String?;
dict: map<Int, Int as uint64>;
energy: Int;
}
message(0x45) Nice {
maybeStr: String?;
}
fun convert() {
let stCell = Profit{
big: null,
dict: null,
energy: 42,
}.toCell();
let msgCell = Nice{ maybeStr: "Message of the day!" }.toCell();
Profit.fromCell(stCell);
Nice.fromCell(msgCell);
Profit.fromSlice(stCell.asSlice());
Nice.fromSlice(msgCell.asSlice());
}
▶️ Open in Web IDE