golang中赋值string到array

riskyer · · 1359 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

要把一个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.

本文来自:博客园

感谢作者:riskyer

查看原文:golang中赋值string到array

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