«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу преобразовать массивы байтов в целые числа со знаком и числа с плавающей запятой в Go?

Как я могу преобразовать массивы байтов в целые числа со знаком и числа с плавающей запятой в Go?

Опубликовано 7 ноября 2024 г.
Просматривать:694

How can I convert byte arrays to signed integers and floats in Go?

Преобразование байтовых массивов в целые числа со знаком и числа с плавающей запятой в Go

В Go двоичный пакет предлагает функции для преобразования целых чисел без знака из []byte массивы, такие как двоичный.LittleEndian.Uint16() и двоичный.BigEndian.Uint32(). Однако прямых эквивалентов целым числам со знаком или числам с плавающей запятой не существует.

Причина отсутствия функций преобразования целых чисел со знаком

Отсутствие функций преобразования целых чисел со знаком в первую очередь связано с к тому факту, что интерпретация двоичного представления как знакового или беззнакового значения является вопросом логики программирования. Сам массив []byte содержит только необработанные двоичные данные, которые можно интерпретировать как знаковые или беззнаковые в зависимости от требований приложения.

Как преобразовать в целые числа со знаком

Чтобы преобразовать целое число без знака в целое число со знаком, можно использовать простое преобразование типа. Поскольку расположение в памяти целых чисел без знака и знака одного и того же размера идентично, преобразование a из uint16 в int16 с использованием int16(a) сохранит исходное двоичное представление при присвоении соответствующего знака.

Преобразование в Плавающие числа

Преобразование целых чисел без знака в числа с плавающей запятой требует немного больше усилий. Пакет math предоставляет для этой цели функции: math.Float32frombits() и math.Float64frombits(). И наоборот, math.Float32bits() и math.Float64bits() могут использоваться для получения беззнакового целочисленного представления значений с плавающей запятой.

Использование Binary.Read() и Binary.Write()

Бинарный пакет также включает функции Read() и Write(), которые могут выполнять эти преобразования более эффективно. Эти функции позволяют считывать непосредственно типизированное значение без необходимости преобразования промежуточных типов.

Пример использования Binary.Read() для преобразования с плавающей запятой

Рассмотрите следующее пример:

b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40}

var pi float64
buf := bytes.NewReader(b)
err := binary.Read(buf, binary.LittleEndian, &pi)
if err != nil {
    fmt.Println("binary.Read failed:", err)
}

fmt.Println(pi) // Output: 3.141592653589793
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3