2017-06-08 4 views
0

Je ne suis pas sûr à 100% pourquoi ma chaîne binaire en unicode ne fonctionne pas. Peut-on signaler le problème ou m'aider à le patcher? Aussi la raison pour laquelle je découpe le binaire est qu'il est trop grand pour que ParseInt puisse le gérer. Voir le lien du terrain de jeu ci-dessous pour un exemple.Chaîne binaire à unicode

func binToString(s []byte) string { 
    var counter int 
    chunk := make([]byte, 7) 
    var buf bytes.Buffer 
    for i := range s { 
     if i%8 == 0 { 
      counter = 0 
      if i, err := strconv.ParseInt(string(chunk), 2, 64); err == nil { 
       buf.WriteString(string(i)) 
      } 
     } else { 
      chunk[counter] = s[i] //i know i can use modulus here too but i was testing and an counter was easier to track and test for me 
      counter++ 
     } 
    } 
    return buf.String() 
} 

Il semble manquer un caractère ou ajouter un caractère (ou deux) lors de la conversion.

Voici un playground link montrant un exemple de la fonction ne fonctionnant pas comme prévu.

Répondre

1

Votre fonction pourrait être mis en œuvre plus simple, de manière plus efficace:

func binToString(s []byte) string { 
    output := make([]byte, len(s)/8) 
    for i := 0; i < len(output); i++ { 
     val, err := strconv.ParseInt(string(s[i*8:(i+1)*8]), 2, 64) 
     if err == nil { 
      output[i] = byte(val) 
     } 
    } 
    return string(output) 
} 

https://play.golang.org/p/Fmo7I-rN3c

+0

Merci et vous avez raison, beaucoup plus efficace. – reticentroot