std.fmt en Zig
Formatear a un buffer de pila y parsear de vuelta — sin allocator a la vista.
const std = @import("std");
pub fn main() !void {
// bufPrint formats into a stack buffer -- no allocator involved.
var buf: [48]u8 = undefined;
const line = try std.fmt.bufPrint(&buf, "day {d} mean {d:.2}", .{
3, 68.14,
});
std.debug.print("built: [{s}]\n", .{line});
// parseInt and parseFloat go the other way.
const day = try std.fmt.parseInt(u8, line[4..5], 10);
const mean = try std.fmt.parseFloat(f32, "68.14");
std.debug.print("parsed back: day {d}, mean {d:.2}\n", .{ day, mean });
}
Cómo funciona
bufPrintescribe dentro debufy devuelve el slice que ocupó.{d:.2}fija los decimales igual en cada print.parseIntyparseFloatdevuelven uniones de error, aquí desenvueltas contry.
Palabras clave y builtins usados aquí
constf32fnpubtryu8varvoid
El intento, en números
- Líneas
- 15
- Caracteres a escribir
- 494
- Tokens
- 133
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 123 segundos.
Paso 2 de 3 en La biblioteca estándar; paso 23 de 27 en Fundamentos del lenguaje.