"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso converter matrizes de bytes em inteiros assinados e flutuantes no Go?

Como posso converter matrizes de bytes em inteiros assinados e flutuantes no Go?

Publicado em 2024-11-07
Navegar:827

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

Convertendo matrizes de bytes em inteiros assinados e flutuantes no Go

No Go, o pacote binário oferece funções para converter inteiros não assinados de []byte matrizes, como binária.LittleEndian.Uint16() e binária.BigEndian.Uint32(). No entanto, não há equivalentes diretos para inteiros assinados ou flutuantes. ao fato de que interpretar uma representação binária como um valor com ou sem sinal é uma questão de lógica de programação. A matriz de []bytes em si contém apenas dados binários brutos, que podem ser interpretados como assinados ou não assinados, dependendo dos requisitos do aplicativo.

Como converter para números inteiros assinados

Para converter um valor inteiro sem sinal em um inteiro com sinal, uma simples conversão de tipo pode ser usada. Como o layout de memória de inteiros sem sinal e com sinal do mesmo tamanho é idêntico, a conversão de a de uint16 para int16 usando int16(a) manterá a representação binária original enquanto atribui o sinal apropriado.

Conversão para Floats

A conversão de números inteiros não assinados em números flutuantes requer um pouco mais de envolvimento. O pacote math fornece funções para esta finalidade: math.Float32frombits() e math.Float64frombits(). Por outro lado, math.Float32bits() e math.Float64bits() podem ser usados ​​para obter a representação inteira não assinada de valores flutuantes.

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

O pacote binário também inclui funções Read() e Write() que podem realizar essas conversões com mais eficiência nos bastidores. Essas funções permitem que você leia diretamente um valor digitado sem a necessidade de conversões de tipo intermediário.

Exemplo de uso de Binary.Read() para conversão flutuante

Considere o seguinte exemplo:

b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40} var pi float64 buf := bytes.NewReader(b) errar: = binário.Read (buf, binário.LittleEndian, &pi) se errar! = nulo { fmt.Println("binary.Read falhou:", err) } fmt.Println(pi) // Saída: 3.141592653589793

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3