需求:分别封装方法将[]byte转换成[]unint16,将[]unint16转换成 []byte
byte相当于unint8
分析:长度为20的[]byte转换为长度为10的[]unint16,
他们之间的转换如
bytes := []byte{0, 1} ===》[0*256+1]=1 注意:第奇数乘256加偶数的值
则
[]uint16的值为[1]
完整代码如下:
1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func BytesToUint16s(bytes []byte) []uint16 { 8 numUint16s := len(bytes) / 2 9 uint16s := make([]uint16, numUint16s) 10 11 for i := 0; i < numUint16s; i++ { 12 uint16s[i] = uint16(bytes[i*2])<<8 | uint16(bytes[i*2+1]) 13 } 14 return uint16s 15 } 16 17 func Uint16sToBytes(uint16s []uint16) []byte { 18 numBytes := len(uint16s) * 2 19 bytes := make([]byte, numBytes) 20 21 for i := 0; i < len(uint16s); i++ { 22 bytes[i*2] = byte(uint16s[i] >> 8) 23 bytes[i*2+1] = byte(uint16s[i]) 24 } 25 return bytes 26 } 27 28 func main() { 29 bytes := []byte{0, 1, 1, 0, 19, 18, 255, 0, 0, 1, 1, 0, 19, 18, 255, 0, 19, 18, 255, 255} 30 uint16s := []uint16{1, 256, 4882, 65280, 1, 256, 4882, 65280, 4882, 65535} 31 32 getUint16s := BytesToUint16s(bytes) 33 getBytes := Uint16sToBytes(uint16s) 34 35 fmt.Println(getUint16s) 36 fmt.Println(getBytes) 37 }
分类:
Go
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)