芹菜是一根葱
专业解决各种前端Bug,吊打各种面试官
posts - 36,comments - 2,views - 77899

需求:分别封装方法将[]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 }
复制代码

 

 

posted on   芹菜是一根葱  阅读(618)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示