背景:
在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