【发布时间】:2016-06-29 06:24:31
【问题描述】:
例如:
我有一个像这样的二进制文件:
bin1 = "2\nok\n3\nbcd\n\n"
或
bin2 = "2\nok\n3\nbcd\n1\na\n\n"
等等……
格式是
byte_size \n bytes \n byte_size \n bytes \n \n
我要解析二进制获取
["ok", "bcd"]
如何在 Elixir 或 Erlang 中实现?
Go 版本
一个 Go 版本解析这个
func (c *Client) parse() []string {
resp := []string{}
buf := c.recv_buf.Bytes()
var idx, offset int
idx = 0
offset = 0
for {
idx = bytes.IndexByte(buf[offset:], '\n')
if idx == -1 {
break
}
p := buf[offset : offset+idx]
offset += idx + 1
//fmt.Printf("> [%s]\n", p);
if len(p) == 0 || (len(p) == 1 && p[0] == '\r') {
if len(resp) == 0 {
continue
} else {
c.recv_buf.Next(offset)
return resp
}
}
size, err := strconv.Atoi(string(p))
if err != nil || size < 0 {
return nil
}
if offset+size >= c.recv_buf.Len() {
break
}
v := buf[offset : offset+size]
resp = append(resp, string(v))
offset += size + 1
}
return []string{}
}
谢谢
【问题讨论】: