登录
首页 >  Golang >  Go问答

将字符串转换为无符号整数(uint)

来源:stackoverflow

时间:2024-03-13 17:39:30 184浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《将字符串转换为无符号整数(uint)》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

在我的项目中,id被设计为snowflakeid。前端传一个字符串给我,数据库存储是bigint。这意味着在存储它之前,需要将其转换为 uint。请告诉我应该怎么做? 演示数据:

m := "156343853366906880"

我的代码:

u, _ := strconv.ParseUint(m, 0, 19)

预期结果准确,不会失去准确性


解决方案


SnowflakeID 是基于时间的 64 位唯一 id。由于您需要将字符串转换为 64 位数字,因此 strconv.parseuint() 非常好。请参阅 ParseUint 处的参考。

在您的代码中,您使用 19 作为位大小。不要将其与前端字符串表示的整数(无符号)中的位数混合。

要将 64 位 snowflakeid(字符串)转换为 64 位无符号整数,请使用 64 作为 bitsize arg。

u, err := strvonv.parseuint(s, 0, 64)
if err != nil {
    // handle error... 
}

当错误确实很重要时,也不要试图忽略它。

strconv.parseuint()的第三个参数是bitsize。 19 位不足以表示数字 156343853366906880。所以该方法返回一个错误。 (您通过将其分配给 _ 来忽略它)

m := "156343853366906880"
_, err := strconv.parseuint(m, 0, 19)
fmt.println(err)
//strconv.parseuint: parsing "156343853366906880": value out of range 524287

2^19 - 1 = 524287 是可以用 19 位表示的最大无符号数。

将 64 作为位大小传递:

m := "156343853366906880"
u, err := strconv.ParseUint(m, 0, 64)
if err == nil {
    fmt.Print(u)
    //156343853366906880
}

如果您的数字大于 uint64,请使用 big.int

string to big Int in Go?

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>