wwww.985758.com13036075017at

fyjcdfgxx · · 155 次点击 · · 开始浏览    

要把一个string赋值给一个array,哥哥遇到一个纠结的困难,研究一番,发现主要原因是array和slice在golang里不是一个东西,本文提供两种解决方案。 在网络编程中network packet transfer,经常要定义固定的字节长度,如下面的f1: package main import"fmt" type T1 struct{ f1 [5]byte// I use fixed size here for file format or network packet format. f2 int32 } func main(){ t := T1{"abcde",3}// t:= T1{[5]byte{'a','b','c','d','e'}, 3} // work, but ugly fmt.Println(t)} prog.go:8: cannot use "abcde" (type string) as type [5]uint8 in field value if I change the line to t := T1{[5]byte("abcde"), 3} prog.go:8: cannot convert "abcde" (type string) to type [5]uint8 直接用copy(t.f1,"abcde")也是不行的。。因为copy的第一个参数必须是slice, 方案1:利用f1[:],注意,这里f1实际上是一个fixed的array,而f1[:]是一个slice package main import"fmt" type T1 struct{ f1 [5]byte f2 int} func main(){ t := T1{f2:3} copy(t.f1[:],"abcde") fmt.Println(t)} 方案2:遍历赋值,不太优美:) var arr [20]byte str :="abc"for k, v := range []byte(str){ arr[k]=byte(v)} the end.

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

155 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传