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
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