Трейт Octal
Трейт Octal из модуля std::fmt
позволяет форматировать целые числа
в восьмеричной системе счисления.
Он используется совместно с плейсхолдером
{:o} в макросах форматирования,
таких как println!, print!,
format!, write! и других.
Параметром трейт принимает ссылку на
форматтер Formatter, который
управляет процессом вывода числа.
Реализация трейта Octal означает,
что тип можно отформатировать в восьмеричном
виде. Все стандартные целочисленные типы
Rust (i8, u8, i32,
u32, i64, u64,
isize, usize и другие)
уже реализуют этот трейт.
Синтаксис
// Использование плейсхолдера {:o} в макросах
println!("{:o}", value);
Пример
Давайте выведем число 64 в восьмеричной
системе счисления:
fn main()
{
let num = 64;
println!("{:o}", num);
}
Результат выполнения кода:
100
Пример
Давайте выведем число 255 в восьмеричной
системе счисления:
fn main()
{
let num = 255;
println!("{:o}", num);
}
Результат выполнения кода:
377
Пример
Давайте выведем несколько чисел в восьмеричной
системе счисления с помощью макроса format!:
fn main()
{
let a = 8;
let b = 9;
let c = 10;
let res = format!("{:o} {:o} {:o}", a, b, c);
println!("{}", res);
}
Результат выполнения кода:
"10 11 12"
Пример
Давайте выведем отрицательное число в восьмеричной системе счисления. Для знаковых типов отрицательные числа выводятся в дополнительном коде:
fn main()
{
let num: i32 = -8;
println!("{:o}", num);
}
Результат выполнения кода:
37777777770
Пример
Давайте реализуем трейт Octal для
собственной структуры:
use std::fmt;
struct Point
{
x: u32,
y: u32,
}
impl fmt::Octal for Point
{
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result
{
write!(f, "({:o}, {:o})", self.x, self.y)
}
}
fn main()
{
let p = Point { x: 8, y: 64 };
println!("{:o}", p);
}
Результат выполнения кода:
(10, 100)