GO语言基本数据类型转换

本文探讨了Go语言中字符串与数组(切片)的相互转换,包括通过ASCII编码、字节拼接以及字节到字符的转换。还介绍了字符串与整型之间的转换方法,如strconv库的使用。最后提到了指针类型的转换,但相关内容未展开。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、字符串和数组的转换

字符串和数组是数据处理中常用的格式类型,他们之间的数据转换方式需要非常熟悉

本文中的数组严格来说应该是切片,切片是go中一个非常重要的概念,不熟悉的请自行百度

  • 1.1、字符串转换成数组,获取字符串的ASCLL编码

string类型和byte类型转换方式为: 

参考下面的示例:

package main

import (
	"fmt"
)

func main() {

	key :="1234567890"
	var data = []byte(key)
	i := 0
	fmt.Println("key = ",key)
	for ; i < len(key) ; i++ {
		fmt.Printf("key[%d]=%x  ", i,key[i])
	}
	fmt.Println()

	fmt.Println("key = ",key)

	for i = 0; i < len(key) ; i++ {
		fmt.Printf("data[%d]=%x  ",i, data[i])
	}
	fmt.Println()

	fmt.Println("end")

}

结果:字符12变成字节0x31,0x32

key =  1234567890
key[0]=31  key[1]=32  key[2]=33  key[3]=34  key[4]=35  key[5]=36  key[6]=37  key[7]=38  key[8]=39  key[9]=30  
key =  1234567890
data[0]=31  data[1]=32  data[2]=33  data[3]=34  data[4]=35  data[5]=36  data[6]=37  data[7]=38  data[8]=39  data[9]=30  
end

总结:

字符串key直接取数组下标是可以正常执行的,因此go中不需要像java一样使用.getByte()取字节数据

当然,go中也可以使用

var byte_data = []byte(string_data)  

将string数据转换成byte类型

  • 1.2、字符串转换成数组,将两个字符拼接成一个字节

前提: 字符数据的范围为0~F

参考下面的示例:

package main

import (
	"encoding/hex"
	"fmt"
)


func main() {

	key :="12345678"
	//arr := bytes.NewBufferString(key)
	arr,_ := hex.DecodeString(key)
	fmt.Println("arr",arr)

	i := 0
	for i = 0; i < len(arr) ; i++ {
		fmt.Printf("arr[%d]=%x  " ,i, arr[i] )
	}

}

结果:字符12变成了字节0x12

arr[0]=12  arr[1]=34  arr[2]=56  arr[3]=78  
  • 1.3、数组转换成字符串,字节的十六进制字节变成字符

参考下面的示例:

package main

import (
	"encoding/hex"
	"fmt"
)

func main() {

	i := 0
	//数组
	arr := [...]byte{0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38}
	//切片
	slice := []byte{0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38}

	//数组用字符形式打印,即可变成字符串输出
	for ; i < len(arr) ; i++ {
		fmt.Printf("%c",arr[i])
	}

	fmt.Println()

	fmt.Println("arr:",arr)
	fmt.Println("src:",slice)


	arr_str := hex.EncodeToString(slice)
	fmt.Println("arr_str = ",arr_str)

}

结果:字节0x31变成了字符31

1234567812345678
arr: [49 50 51 52 53 54 55 56 49 50 51 52 53 54 55 56]
slice: [49 50 51 52 53 54 55 56 49 50 51 52 53 54 55 56]
arr_str =  31323334353637383132333435363738

注意:示例中的hex.EncodeToString中的输入参数为切片,而不是数组

 

  • 1.4、数组转换成字符串,两个字节拼接成一个字符

前提:字节数组为字符0~F所对应的ASCLC码表示

示例如下:

package main

import (
	"fmt"
)

func main() {
	
	//切片
	slice := []byte{0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38}
	
	//
	fmt.Println(string(slice))

}

结果: 0x31,转换成了字符串1,0x32转换成字符串2

1234567812345678

 

2、string和int类型的转化

string转成int:
int, err := strconv.Atoi(string)
string转成int64:
int64, err := strconv.ParseInt(string, 10, 64)
int转成string:
string := strconv.Itoa(int)
int64转成string:
string := strconv.FormatInt(int64,10)

3、指针类型的转换

 

(学习和更新中……)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值