golang int64轉int

背景:
在cgo中,需要將golang的整數類型傳到cgo中使用,但是不能直接傳golang的int類型,而應該是 int32, 數值的內存長度才能與 c中int 長度一致。 但是有時 golang中獲取到的整型是int64, 但是不能直接使用 int32 強制轉換。
以下將提供兩種方法 ,將 golang int64 轉換爲golang int 。(golang int64轉int32方法類似)。

轉換方法

1 字符串中轉

即將golang int64 先轉換wei golang string, 然後將 string 轉換爲 int

// main.go

package main
import (
 "strconv"
 "fmt"
 "reflect"
)

func main () {
     var id64 int64 = 99
     // method 1:
     strInt64 := strconv.FormatInt(id64, 10)
     id16 ,_ := strconv.Atoi(strInt64)
     fmt.Println(id16) 
    fmt.Println(reflect.TypeOf(id16))

2 指針類型轉換

即獲取golang int64 地址,將其轉爲int類型,之後讀取該內存單元的地址時,會將變量的值解釋爲 int類型。

// main.go
package main
import (
 "unsafe"
 "fmt"
 "reflect"
)

func main () {
     var id64 int64 = 99
    // method 2:
    idPointer := (*int)(unsafe.Pointer(&id64))
    idd16 := *idPointer
    fmt.Println(idd16)
    fmt.Println(reflect.TypeOf(idd16))
}

說明

第2 種方法較第一種方法不安全

同時要注意int64範圍, id64數值不能超過最大值或者低於最小值,值範圍可參考,https://studygolang.com/articles/6566

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章