使用golang开发物联网服务端学习

基础部分

进制转换:

1. 二进制转八进制  %b -> %o
2. 二进制转十进制  %b ->  %d
3. 二进制转十六进制 %b -> %x
4. 八进制转二进制 %o -> %b
5. 八进制转十进制 %o -> %d
6. 八进制转十六进制 %o -> %x
7. 十进制转二进制 %d -> %b
8. 十进制转八进制 %d -> %o
9. 十进制转十六进制 %d -> %x
10. 十六进制转二进制 %x -> %b
11. 十六进制转八进制 %x -> %o
12. 十六进制转十进制 %x -> %d
// 例
fmt.Printf("十进制%d转成八进制%o",num1,num2)
%b    表示为二进制
%c    该值对应的unicode码值
%d    表示为十进制
%o    表示为八进制
%q    该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示
%x    表示为十六进制,使用a-f
%X    表示为十六进制,使用A-F
%U    表示为Unicode格式:U+1234,等价于"U+%04X"
%E    用科学计数法表示
%f    用浮点数表示
hex := fmt.Sprintf("%08x", i) 

说明:hex是16进制,i是int类型,以上代码将i转为16进制,不足的部分前面加0,补足8位,%08x中的08表示补足到8位数。

// 二进制转十进制
func main(){
	var num01 int = 0b1100
	fmt.Printf("%b的十进制为%d", num01,num01)
}

// 八进制转十进制
func main(){
	var num01 int = 0o10
	fmt.Printf("%o的十进制为%d", num01,num01)
}

// 十六进制转十进制

func main(){
	var num01 int = 0xf
	fmt.Printf("%x的十进制为%d", num01,num01)
}

 

 

开发部分

服务端向设备发送升级文件:

流程:

设备发起升级请求-》服务器响应请求并读取升级文件放入数组-》

设备发起文件传输请求-》服务器传输文件

读取文件的坑:

通过os.OpenFile中的reader.ReadString按行读取文件,每行存在特殊空字符,如果要做其他处理,记得把空字符去掉!!!!!!!!!!!!!!!!!!!

// 从文件读取的存在非空字符,过滤非16进制字符
func filterNoHex(str string) (res string) {
	reg, err := regexp.Compile("[^a-zA-Z0-9]+")
	if err != nil {
		logger.Error(err)
	}
	res = reg.ReplaceAllString(str, "")
	return res
}

二进制文件是以冒号开头的,但转化为十六进制时,冒号会出错,需要将冒号去掉再转化。

文件数组存放的坑:

需要额外声明一个通道,第一次读取升级文件转化为数组并放入通道,下次设备再次请求传输文件时,将数组从通道取出,并读取响应行数返回给设备,之后得将数组再次放入通道,确保下次请求通道里有数据,否则会阻塞在通道处。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值