二进制字符串转unicode
Binary string to unicode
我不是 100% 确定为什么我的 Unicode 二进制字符串不起作用..任何人都可以指出问题或帮助我修补它吗?另外,我将二进制文件分块的原因是它对于 ParseInt 来说太大而无法处理。有关示例,请参见下面的操场 link。
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()
}
转换时似乎漏掉了一个字符或添加了一个(或两个)字符。
这里有一个 playground link 显示函数未按预期工作的示例。
您的函数可以以更简单、更有效的方式实现:
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)
}
我不是 100% 确定为什么我的 Unicode 二进制字符串不起作用..任何人都可以指出问题或帮助我修补它吗?另外,我将二进制文件分块的原因是它对于 ParseInt 来说太大而无法处理。有关示例,请参见下面的操场 link。
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()
}
转换时似乎漏掉了一个字符或添加了一个(或两个)字符。
这里有一个 playground link 显示函数未按预期工作的示例。
您的函数可以以更简单、更有效的方式实现:
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)
}