Maison  >  Article  >  développement back-end  >  Convertir en binaire. La lecture de la donnée ne donne aucun résultat

Convertir en binaire. La lecture de la donnée ne donne aucun résultat

WBOY
WBOYavant
2024-02-08 22:06:09562parcourir

Convertir en binaire. La lecture de la donnée ne donne aucun résultat

Dans cet article, l'éditeur PHP Baicao présentera comment convertir des éléments de données en binaire et ne donnera aucun résultat. Le processus est très simple et il vous suffit de suivre quelques règles de base. Tout d’abord, les éléments de données sont lus un par un, puis chaque élément de données est converti en binaire. Ensuite, pour chaque nombre binaire, si les chiffres qu'il contient sont tous des zéros, donnez un résultat nul. Grâce à cette méthode, nous pouvons facilement convertir les éléments de données en binaire et obtenir les résultats correspondants. Si cette démarche vous intéresse, alors suivez l'éditeur pour apprendre ensemble !

Contenu de la question

Je souhaite lire des données binaires et les écrire dans un fichier, et mes données ne sont que des tranches. La partie encodage fonctionne mais mon décodage via binary.Read ne donne aucun résultat. Qu'ai-je fait de mal?

data := []int16{1, 2, 3}
    buf := new(bytes.Buffer)
    err := binary.Write(buf, binary.LittleEndian, data)
    if err != nil {
        fmt.Println("binary.Write failed:", err)
    }
    fmt.Println(buf.Bytes())
    // working up to this point

    r := bytes.NewReader(buf.Bytes())
    got := []int16{}
    if err := binary.Read(r, binary.LittleEndian, &got); err != nil {
        fmt.Println("binary.Read failed:")
    }
    fmt.Println("got:", got)

L'exécution de ce code donne

[1 0 2 0 3 0]
got: []

Lien Playground ici : https://go.dev/play/p/yZOkwXj8BNv

Workaround

Vous devez rendre la tranche aussi grande que ce que vous voulez lire dans le tampon. Vous obtenez un résultat vide car got a une longueur de zéro.

got := make([]int16, buf.Len()/2)
if err := binary.Read(buf, binary.LittleEndian, &got); err != nil {
    fmt.Println("binary.Read failed:")
}

Comme l'a dit JimB, vous pouvez lire directement à partir du tampon.

Voir aussi la documentation de binary.Read

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer