说明
网络通信需要将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
var a int8 = -1
byte(a) // 正常 255
//byte->int8
int8(byte(255)) //异常 constant 255 overflows int8
// byte->int8
var a byte = 255
int8(a) //正常 -1
通用方法 Write/Read
- /int8/uint8/int16/uint16/int32/uint32/int64/uint64/float32/float64->[]byte
var a int16 =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,