go学习(五)——基本数据类型转换

来源:互联网 发布:网络推广活动方案 编辑:程序博客网 时间:2024/05/22 13:22
Go数据类型和C数据类型转换1. 基本类型转换Go转换成C:var i intci:=C.int(i) C转换成Go:vari C.intgoi:=int(i)2. 字符串类型转换Go转换成C:var str stringcstr := C.CString(str)C转换成Go:/*#include <stdlib.h>#include <stdio.h>char foo[] = "hellofoo";char *bar = "hellobar";*/import "C"import "fmt"func main() {    fmt.Printf("%s\n", C.GoString(&C.foo[0]))    fmt.Printf("%s\n", C.GoString(C.bar))}3. 数组类型转换/*#include <stdio.h>int cIArray[] = {1, 2, 3, 4, 5, 6, 7};*/import "C"import "fmt"func main() {    goIArray := C.cIArray[:]    fmt.Println(goIArray)}4.Go中的 []byte 转换为C中的 *charbt := make([]byte, 10)c_char := (*C.char)(unsafe.Pointer(&bt)) // 转换5.Go中的string转换为C中的char *var buf string//go string to *C.charvar cmsg *C.char = C.CString(buf)6.C中char[]转换为go中的string说明:实践发现,第3中情况中的转换, C.GoString(&C.foo[0])会可能导致转换后string类型数据错误,为避免数据不能全部转换,特用下面方式转换:char pReadBuf[1024 * 30] = {0};goWriteString := C.GoStringN(&C.pReadBuf[0], 1024*30)Go自身数据类型转换1. golang []byte和string相互转换package mainimport (    "fmt")func main() {    str2 := "hello"    data2 := []byte(str2)    fmt.Println(data2)    str2 = string(data2[:])    fmt.Println(str2)}2. []byte转换为整形import(    "encoding/binary")//字节转换成整形func BytesToInt(b []byte) int {    bytesBuffer := bytes.NewBuffer(b)    var tmp int32    binary.Read(bytesBuffer, binary.BigEndian, &tmp)    return int(tmp)}