Files
BinaryUtils/src/main/kotlin/BinConvert.kt

85 lines
4.3 KiB
Kotlin
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package ru.thiflict.binaryutils
/**
* Объект выполняет конвертации чисел из одной системы счисления в другую.
*
* Репозиторий: https://git.ds1.thiflict.ru/Thiflict/BinaryUtils
*
* @author Thiflict
*
* @since[1.0.3]
*/
object BinConvert {
/**
* Преобразует значение типа [Long] в строку, представляющую его 64-битное двоичное представление.
*
* Биты выводятся от старшего (индекс 63) к младшему (индекс 0). Каждый бит представлен символом '0' или '1'.
*
* Результат всегда содержит ровно 64 символа, включая ведущие нули.
*
* @return строка длиной 64 символа, состоящая из нулей и единиц, соответствующая двоичному представлению числа.
*/
fun Long.toBinary(): String {
return (0..63)
.reversed()
.map { bit -> (this shr bit) and 1 }
.joinToString("")
}
/**
* Преобразует значение типа [Int] в целое число, десятичная запись которого
*
* совпадает с 32-битным двоичным представлением исходного числа (включая ведущие нули).
*
* Биты перебираются от старшего (индекс 31) к младшему (индекс 0).
*
* Полученная строка из символов '0' и '1' интерпретируется как десятичное число.
*
* @return целое число, десятичное представление которого повторяет 32-битную двоичную форму исходного значения.
*/
fun Int.toBinary(): String {
return (0..31)
.reversed()
.map { bit -> (this shr bit) and 1 }
.joinToString("")
}
/**
* Преобразует значение типа [Short] в целое число, десятичная запись которого
*
* совпадает с 16-битным двоичным представлением исходного числа (включая ведущие нули).
*
* Значение [Short] перед обработкой приводится к [Int]. Биты перебираются от старшего (индекс 15)
*
* к младшему (индекс 0). Полученная строка из '0' и '1' интерпретируется как десятичное число.
*
* @return целое число, десятичное представление которого повторяет 16-битную двоичную форму исходного значения.
*/
fun Short.toBinary(): Long {
return (0..15)
.reversed()
.map { bit -> (this.toInt() shr bit) and 1 }
.joinToString("")
.toLong()
}
/**
* Преобразует значение типа [Byte] в целое число, десятичная запись которого
*
* совпадает с 8-битным двоичным представлением исходного числа (включая ведущие нули).
*
* Значение [Byte] перед обработкой приводится к [Int]. Биты перебираются от старшего (индекс 7)
*
* к младшему (индекс 0). Полученная строка из '0' и '1' интерпретируется как десятичное число.
*
* @return целое число, десятичное представление которого повторяет 8-битную двоичную форму исходного значения.
*/
fun Byte.toBinary(): Int {
return (0..7)
.reversed()
.map { bit -> (this.toInt() shr bit) and 1 }
.joinToString("")
.toInt()
}
}