本篇内容主要讲解“golang网络字节与基本类型的转换方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“golang网络字节与基本类型的转换方法”吧!
说明
网络通信需要将go基本数据类型转为字节. go如何做?
基本类型
c类型 | go类型 | 字节长度 |
---|---|---|
signed char | int8 | 1 |
unsigned char | uint8 | 1 |
_Bool | bool | 1 |
short | int16 | 2 |
unsigned short | uint16 | 2 |
int | int32 | 4 |
unsigned int | uint32 | 4 |
float | float32 | 4 |
long long | int64 | 8 |
unsigned l long | uint64 | 8 |
double | float64 | 8 |
char[] | uint8 | 1 |
有符号与无符号转换
int8/uint->byte或 byte->int8/uint8
1个字节强制类型转换会超范围
//int8->byte varaint8=-1 byte(a)//正常255 //byte->int8 int8(byte(255))//异常constant255overflowsint8 //byte->int8 varabyte=255 int8(a)//正常-1
通用方法 Write/Read
/int8/uint8/int16/uint16/int32/uint32/int64/uint64/float32/float64->[]byte
varaint16=1 buf:=new(bytes.Buffer) binary.Write(buf,binary.BigEndian,&a) fmt.Println(buf.Bytes())
[]byte ->int8/uint8/int16/uint16/int32/uint32/int64/uint64/float32/float64
b:=[]byte{64,9,30,184,81,235,133,31} varafloat64 binary.Read(bytes.NewBuffer(b),binary.BigEndian,&a) fmt.Println(a)
binary.BigEndian方法
import( "bytes" "encoding/binary" "reflect" ) //================================= // 数字-->字节 //================================= funcNumber2Bytes(valueinterface{})[]byte{ result:=make([]byte,0) switchv:=value.(type){ caseint8: returnappend(result,uint8(v)) caseint16: binary.BigEndian.PutUint16(result,uint16(v)) returnresult caseint32: binary.BigEndian.PutUint32(result,uint32(v)) returnresult caseint64: binary.BigEndian.PutUint64(result,uint64(v)) returnresult caseuint8: returnappend(result,uint8(v)) caseuint16: binary.BigEndian.PutUint16(result,v) returnresult caseuint32: binary.BigEndian.PutUint32(result,v) returnresult caseuint64: binary.BigEndian.PutUint64(result,v) returnresult casefloat32: buf:=new(bytes.Buffer) binary.Write(buf,binary.BigEndian,&v) returnbuf.Bytes() casefloat64: buf:=new(bytes.Buffer) binary.Write(buf,binary.BigEndian,&v) returnbuf.Bytes() } returnnil } //================================= // 字节-->数字 //================================= funcBytes2Number(data[]byte,kindreflect.Kind)interface{}{ switchkind{ casereflect.Int8: returnint8(data[0]) casereflect.Int16: returnint16(binary.BigEndian.Uint16(data)) casereflect.Int32: returnint32(binary.BigEndian.Uint32(data)) casereflect.Int64: returnint64(binary.BigEndian.Uint64(data)) casereflect.Uint8: returndata[0] casereflect.Uint16: returnbinary.BigEndian.Uint16(data) casereflect.Uint32: returnbinary.BigEndian.Uint32(data) casereflect.Uint64: returnbinary.BigEndian.Uint64(data) casereflect.Float32: varvfloat32 buf:=bytes.NewBuffer(data) binary.Read(buf,binary.BigEndian,&v) returnv casereflect.Float64: varvfloat64 buf:=bytes.NewBuffer(data) binary.Read(buf,binary.BigEndian,&v) returnv } returnnil }
到此,相信大家对“golang网络字节与基本类型的转换方法”有了更深的了解,不妨来实际操作一番吧!这里是编程网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
golang网络字节与基本类型的转换方法的介绍就聊到这里吧,感谢你花时间阅读,更多关于golang网络字节与基本类型的转换方法的信息别忘了在本站进行查找哦。屹东网往后会继续推荐golang网络字节与基本类型的转换方法相关内容。