golang小白:int与string的爱恨纠缠

本文介绍Golang中int与string类型的相互转换方法,包括使用strconv包进行int到string的转换,以及利用ParseInt函数实现string到int及int64的转换。

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

在这里插入图片描述

golang新手都需要的技能之一,就是int和string的转化,从java过来的朋友会发现,golang的转换似乎比java麻烦,起码int没法直接转,本文就梳理一下转化逻辑,希望对你有帮助。

int to string

需要用到strconv

func main() {
	var a int = 72
	stra := strconv.Itoa(a)
	fmt.Printf("int %d to string is : %s\n", a, stra)

	stra2 := string(a)
	fmt.Printf("stra2 is %v", stra2)
}

结果是:

int 1238 to string is : 1238
stra2 is Ӗs

需要注意的是,第二种用string()直接转的方式是直接将数字作为utf8编码转化为其对应的符号
比如

fmt.Printf("string(97) == \"a\" is %v \n", string(97) == "a")

结果是:

string(97) == "a" is true 

int64 to string

var b int64 = 10
strb1 := strconv.FormatInt(b, 10)
strb2 := strconv.FormatInt(b, 2)
fmt.Printf("int64 %d string is : %s\n", b, strb1)
fmt.Printf("int64 %d string is : %s\n", b, strb2)

结果是:

int64 10 string is : 10
int64 10 string is : 1010

Itoa 只能转int类型to string,int64需要用FormatInt。

该函数:

func FormatInt(i int64, base int) string {
	if fastSmalls && 0 <= i && i < nSmalls && base == 10 {
		return small(int(i))
	}
	_, s := formatBits(nil, uint64(i), base, i < 0, false)
	return s
}

i 为int64的数,后面表示是要转为多少进制,再将其转为字符串

int/int64 to string

var c int64 = 123
sss := fmt.Sprintf("%v", c)
fmt.Printf("%d 的字符串 %s", c, sss)

结果:

123 的字符串 123

使用fmt的Sprintf函数,该函数不输出,只返回结果字符串

string to int

s := "32"
fmt.Printf("string \"32\" to int is %d\n", s)

结果是:

string "32" to int is %!d(string=32)

string to int64

ss := "1832"
res1, _ := strconv.ParseInt(ss, 10, 64)
fmt.Printf("base 10, 64bit is %d\n", res1)
res2, _ := strconv.ParseInt(ss, 16, 64)
fmt.Printf("base 16, 64bit is %d\n", res2)
res3, _ := strconv.ParseInt(ss, 10, 8)
fmt.Printf("base 16, 1bit is %d\n", res3)

结果:

base 10, 64bit is 1832
base 16, 64bit is 6194
base 16, 1bit is 127

第一个参数为字符串,第二个参数为进制, 第三个参数为位数n
将字符串转化为10进制,再转为对应的进制,放到n bit里。
由于默认为有符号数,所以8位的int最大存储127

第二个参赛base取值(0, 2~36)
第三个参数bit取值(0~64)
base为0时,默认的取值方式为前缀法:

  • 0b开头: base = 2
  • 0或0o开头: base = 8
  • 0x开头: base = 16
  • 其他: base = 10

bit 取值为 0 8 16 32 64,代表int int8 int16 int32 int64
大于64或小于0 返回error

  • 返回*NumError类型的时候,会将原参数带上,err.Num = s;
  • 如果是不合规定的字符,err.Err = ErrSyntax,value is 0
  • 如果这个数给定的位数无法承载,则返回给定范围的有符号数的最大值,且有error:err.Err = ErrRange
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值