"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo convertir matrices de bytes en enteros con signo y flotantes en Go?

¿Cómo puedo convertir matrices de bytes en enteros con signo y flotantes en Go?

Publicado el 2024-11-07
Navegar:535

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

Conversión de matrices de bytes en enteros con signo y flotantes en Go

En Go, el paquete binario ofrece funciones para convertir enteros sin signo de []byte matrices, como binario.LittleEndian.Uint16() y binario.BigEndian.Uint32(). Sin embargo, no existen equivalentes directos para enteros con signo o flotantes.

Razón de la ausencia de funciones de conversión de enteros con signo

La ausencia de funciones de conversión de enteros con signo se debe principalmente al hecho de que interpretar una representación binaria como un valor con o sin signo es una cuestión de lógica de programación. La matriz de []bytes en sí contiene solo datos binarios sin procesar, que pueden interpretarse como con o sin signo según los requisitos de la aplicación.

Cómo convertir a enteros con signo

Para convertir un valor entero sin signo en un entero con signo, se puede utilizar una conversión de tipo simple. Dado que el diseño de la memoria de los enteros sin signo y con signo del mismo tamaño es idéntico, al convertir a de uint16 a int16 usando int16(a) se conservará la representación binaria original mientras se asigna el signo apropiado.

Convertir a Flotantes

La conversión de enteros sin signo a flotantes requiere un poco más de participación. El paquete matemático proporciona funciones para este propósito: math.Float32frombits() y math.Float64frombits(). Por el contrario, math.Float32bits() y math.Float64bits() se pueden utilizar para obtener la representación entera sin signo de valores flotantes.

Uso de Binary.Read() y Binary.Write()

El paquete binario también incluye funciones Read() y Write() que pueden realizar estas conversiones de manera más eficiente internamente. Estas funciones le permiten leer directamente un valor escrito sin la necesidad de conversiones de tipo intermedias.

Ejemplo de uso de Binary.Read() para conversión flotante

Considere lo siguiente ejemplo:

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
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3