自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 收藏
  • 关注

转载 Wifi Display

wifi display常用术语  AP:wifi access point  Primary Sink: a device that supports rendering video content only or both audio and video contents.  Secondary Sink: a device that supports rending a...

2019-06-22 14:14:00 238

转载 C++示例

Linux C++ template使用示例:#include <iostream>#include <cstring>using namespace std;template <class T>T& swaps(T &a,T &b,int n){ for(int i = 0;i<n;i+...

2019-04-02 15:35:00 153

转载 MQTT控制---pingreq

心跳请求  客户端向服务端发送PINGREQ报文用于:在没有任何其他控制报文从client发给server时,告诉server,client还活着请求server发送 响应确认它还活着使用网络以确认网络连接没有断开固定报头  报头长度:2 Bytes  1、报头控制类型(0xc0)  报文PINGREQ没有可变报头。  2、剩余长度  ...

2017-03-07 10:46:00 1375

转载 MQTT控制---subscribe

连接服务端  客户端向服务端发送SUBSCRIBE报文用于创建一个或多个订阅。固定报头  报头长度:2 Bytes  1、报头控制类型(0x82)  报文SUBSCRIBE控制报固定报头的第3、2、1、0位是保留位,必须设置为0,、0、1、0。  服务器必须将其它的任何值当做是不合法的并关闭连接。  2、剩余长度  等于可变报头的长度加上有效载荷的长度...

2017-03-06 18:40:00 580

转载 MQTT控制---connect

连接服务端  客户端到服务端的第一个报文必须是CONNECT,且只能发送一次,发送的第二个connect报文当作违规处理并断开连接。  有效载荷包含一个或者多个编码的字段。包括客户端的唯一标识符,Will主题,Will消息,用户名和密码。  除了标识外,其他字段都是可选的,基于标志位决定可变报头中是否需要包含这些字段。固定报头  报头长度:2 Bytes  1...

2017-02-10 14:22:00 430

转载 MQTT报文格式

MQTT报文结构  控制报文由三部分组成:  1、Fixed header 固定报头,所有报文都包含  2、Variable header 可变报头,部分报文包含  3、Body 有效载荷,部分报文包含固定报头  报头长度:2 ~ 5 Bytes  1、报文类型:由第一个字节4-7 表示;共16个类型,但是保留第0个,第15个类型不用:      ...

2017-02-09 16:16:00 433

转载 MQTT初步使用

环境搭建  1、mosquitto所需要的rpm包  2、c-ares-1.12.0  3、安装最新的openssl版本  4、mosquitto-1.4.10mosquitto需要的rpm包  c-ares安装c-ares源码下载./buildconf    #提示libtoolize not found. 需要安装libtool,au...

2017-02-08 18:56:00 107

转载 越简单越喜欢

今天在头条上看到的一篇文章,很喜欢。索性就收藏进我的博客家园来。文章来源:15万装修的新房,设计太贴心了,越住越喜欢,感觉赚到了在这个物价那么高的社会里,15万装修个房子说贵也不是说好贵,当然也不便宜。因为这是我第一次买房装修,所以看出房子最后的效果非常的满意,最重要是设计考虑很周到,细节处理很贴心。房子刚入住2个月,发现越来越喜欢,朋友也很喜欢来我家做客,对这房子十分满意,所以...

2017-01-13 14:48:00 91

转载 大端小端

每次遇到大端小端的问题,都要想很久。效率就这样不经意地降低了。只因为理解的不透彻。其实只需要记住一点,按照人类思考方式的就是大端模式(吃鸡蛋)。比如:0x00000008 这个值在内存中是这样存放的:大端:addr : 0 1 2 3 4 -->value: 0x00 0x00...

2016-10-12 15:27:00 45

转载 Chapter 21_5.2 tab扩展

  在Lua中,像这样()的空白捕获具有特殊意义。表示捕获它在目标字符串中的位置,返回一个数字:print(string.match("hello","()ll()")) --> 3 5 --第一个()捕获当前字符串位置,第二个()是在匹配后捕获的位置这个示例与string.find得到的结果不一样,就因为第二个捕获的位置是在匹配之后的。在一个字符串中扩展...

2016-09-28 17:27:00 86

转载 Chapter 21_5.1 URL编码

  URL编码是http所使用的一种编码方式,用于在一个URL中传送各种参数。该编码方式会将特殊字符("=","&","+")编码为"%<xx>"形式。<xx>是字符的十六进制表示。此外,它还会将空格转换为"+",例如,它会将字符串"a+b = c" 编码为:"a%2Bb+%3D+c"最后,它会将每对参数名及其值用"="连接起来,并将每对结果nam...

2016-09-28 09:31:00 80

转载 Chapter 21_5 替换

  gsub函数的第三个参数不仅是一个字符串,还可以是一个函数或table。如果是函数,gsub会在每次找到匹配时调用该函数。调用时的参数是捕获到的内容,该函数的返回值作为要替换的字符串。如果是table,gsub会用每次捕获到的内容作为key,在table中进行查找。并将对应的value作为要替换的字符串。如果table不包含这个key,gsub不改变这个匹配。示例:将完成...

2016-09-27 11:07:00 63

转载 Chapter 21_4 捕获

  捕获功能在很多地方都在使用,就是从目标字符串中抽出匹配于该模式的内容,在指定捕获时,应将模式中需要捕获的部分写到一对圆括号内。对于具有捕获的模式,函数match会将所有捕获到的值作为单独的结果返回。即它会将目标字符串切成多个捕获到的部分:pair = "name = Anna"key,value = string.match(pair,"(%a+)%s*=%s*(%a...

2016-09-26 17:29:00 62

转载 Chapter 21_3 模式

  很多地方都会看到各种匹配模式,每次接触这些函数,颇使人望文生畏。  今天就来好好面对它、认识它、了解它、最后战胜它。  匹配模式都是用一串常规的字符串来描述,最主要的是理解这些字符串的语法及含义(即它能匹配到什么)。^$()%.[]*+-?魔法字符,具有特殊的含义。%作为这些魔法字符的转义字符,还可以用于其他所有非字母和数字。%. 表示匹...

2016-09-23 23:26:00 72

转载 新发现的一些C函数

  今天看lsocket代码,发现有三个C函数,以前一直没有用过。  觉得特别有意思,一个strspn,一个strrchr,一个getaddrinfo。strspn  #include <string.h>  size_t strspn(const char *s , const char *accept);  计算从字符串s的起始位置开始,连续并...

2016-09-22 17:21:00 55

转载 Chapter 21_2 模式匹配函数

  基础函数比较简单,就是几个普通的函数string.byte、string.char、string.rep、string.sub、string.format还有大小写转换函数upper和lower。  接下来介绍最强大的函数,find、match、gsub、和gmatch,它们都是基于“模式(pattern)”的。  不同于其他脚本语言,Lua既没有用POSIX,也没有使用Pe...

2016-09-22 13:41:00 70

转载 Chapter 21_1 字符串函数

  接下来开始接触Lua强大的字符串处理能功能——字符串库。  原始的Lua解释器操作字符串的能力很有限,真正强大的能力还是来自字符串库。  它所有的函数都在模块string中。它还为strings设置了一个元表,__index域指向该string table。  所以string.byte(s,i)可以使用s:byte(i)这种面向对象的写法。  string.len(...

2016-09-21 16:23:00 68

转载 Chapter 20_1 table库

  table库是由一些辅助函数构成,把table作为数组来操作,所有的函数都忽略传入参数的那张表中的非数字键。  无论如何,若一个操作需要取表的长度,这个表必须是一个真序列,或是拥有__len元方法。  提供了这样一些功能:从列表中插入和删除元素、对元素排序、连接一个数组中所有字符串。插入和删除  函数table.insert用于将一个元素插入到一个数组指定位置...

2016-09-20 19:06:00 93

转载 Chapter 19_0 位操作库

  位操作库是Lua5.2版本里添加的库,所有函数放在bit32 table里。(bit32只能针对32位整数运算)  在Lua5.3版本里,bit32库被废弃掉。不过可以使用一个外部兼容库,但是最好直接用对应的位操作符。标准Lua中的位操作可以用于64位整数。  位操作库不在新版本中,就不用花时间去了解。可以参考Lua5.3与Lua5.2的版本区别。转载于:https...

2016-09-20 16:04:00 90

转载 Chapter 18_0 数学库

  从今天起,开始接触Lua的标准库(数学库、table库、字符库、I/O库、操作系统库、调试库)。一路走来,从最基本的变量、函数、迭代器、协同程序到稍微复杂的元表、元方法、环境、模块,以及最后被整蒙了的对象编程、继承、类、弱引用table、垃圾回收终结器。只要坚持下去,会慢慢吃透的!  首先从介绍数学库开始。  数学库这一章讲的不多,更多详细介绍参考Lua手册。  ma...

2016-09-20 11:19:00 69

转载 Chapter 17_4 终结器

  Lua中的垃圾回收主要是针对Lua对象,但是也可以做一些额外的资源管理工作。  可以为表设定垃圾收集的元方法(对于完全用户数据,则需要使用C API),该元方法称为 终结器。  Lua用"__gc" 元方法实现终结器:o = {x = "hi" }setmetatable(o , {__gc = function (o ) print (o.x) end } )...

2016-09-19 20:00:00 51

转载 Chapter 17_3 table的默认值

对象属性  有很多情况需要把有些属性绑定到某个对象,例如:函数与其名称、table的默认值、数组大小等...当对象是一个table时,可以通过适当的key将属性存储在这个table中。如果对象不是一个table,它就无法保存属性了。另外,即使是table,有时也不想将属性存储在原table中。可以使用外部table来关联它们,将对象作为key,对象的属性作为value。...

2016-09-19 17:47:00 251

转载 Chapter 17_2 备忘录函数

  一项通用的编程技术:用空间换时间。  例如有一种做法就可以提高一些函数的运行速度,记录下函数计算的结果,当再次调用该函数时,便可以复用之前的结果。比如,一个普通服务器,在它收到请求中包含Lua代码,会loadstring,编译出新函数。为了避免反复loadstring,用一个辅助table保存编译结果。local results = {} --辅助的table,...

2016-09-19 16:13:00 85

转载 Chapter 17_1 弱引用table

  Lua采用了自动内存管理。所以不用担心新创建的对象需要的内存如何分配出来,也不用考虑对象不再被使用后怎样释放它们所占用的内存。Lua实现了一个增量标记-扫描收集器。它使用这两个数字来控制垃圾收集循环:垃圾收集器间歇率 和 垃圾收集器步进倍率。这两个数字都使用百分数为单位(例如:100在内部表示1)  前者表示控制收集器需要在开启新的循环前要等待多久,后者表示控制收集器运作...

2016-09-19 11:29:00 67

转载 Chapter 16_5 单一方法

  当一个对象只有一个方法时,可以不用创建接口table,但是要将这个单独的方法作为对象来返回。可以参考迭代器那一节,是如何构造一个迭代器函数,那个函数将状态保存为closure。  一个具有状态的迭代器是一个单一方法对象。  单一方法对象还有一种情况,若这个方法是一个调度(dispatch)方法,它根据某个参数来完成不同的操作:function newObject(va...

2016-09-19 09:18:00 82

转载 Chapter 16_4 私密性

  在Lua面向对象编程的基础设计当中,没有提供私密性机制。但是可以用其他方法实现,从而获得对象的访问控制。这种实现不常用,作为兴趣爱好,只做基本了解。基本做法是:通过两个table来表示一个对象。一个用来保存状态,一个用于操作(或称为接口)。为了避免未授权的访问,表示状态的table不保存在其他table中,而只是保存在方法的closure中。例如:functi...

2016-09-18 19:29:00 55

转载 Chapter 16_3 多重继承

  在Lua中进行面向对象编程时有几种方法,上一小结介绍了一种使用__index元方法的做法。下面要介绍另一种方法,可以在Lua中实现多继承.  关键一点,在于用函数作为__index元字段。  多重继承意味着一个类可以有多个基类。因此无法使用一个类中的方法来创建子类,而是需要定义一个特殊的函数来创建。它的参数表示新类的所有基类。创建时它会设置元表中的__index元方法...

2016-09-18 18:55:00 64

转载 Chapter 16_2 继承

  类也是对象,所有它们也可以从其他类获得方法。这就是“继承”,可以在Lua中表示:Account = { balance = 0}function Account:new(o) o = o or {} setmetatable(o , self) self.__index = self return oendfunction ...

2016-09-18 18:10:00 58

转载 Chapter 16_1 Class

  一个类就是一个创建对象的模具。对于一些基于原型的语言,对象是没有“类型”的,而是每个对象都有一个原型(prototype).原型也是一种常规的对象。当其他对象(类的实例)遇到一个未知操作时,原型会先查找它。这种语言要创建一个类,只需要创建一个专用作其他对象的原型。类和原型都是一种组织对象间共享行为的方式。  在Lua中,可以用继承实现原型。如果有两个对象a和b,要让b作为...

2016-09-18 17:34:00 57

转载 Chapter 16_0 面向对象编程

  Lua中的table就是一种对象。  1、table和对象一样拥有状态  2、和对象一样有一个独立的标识符(a self)  3、和对象一样,具有独立于创建者和创建地的生命周期。对象有他们自己的操作,table同样也有:Account = {balance = 0}function Account.withdraw(v) Account.bala...

2016-09-18 14:42:00 53

转载 小米2s刷机

  每次系统内存不足,卡的不行就恨不得马上换新手机,发现手机也没有什么大的毛病,也没有其他苛刻的要求。换个新系统继续使用吧,除了屏幕小了一点,将就了吧。物尽其责,坚决抵制过度消费。小米手机2s 16G 联通版,购买于2013-4-12。一、所需资源和工具:  下载刷机工具:    MiPhone20151028.exe (26M)  下载Fastboot完整包: a...

2016-09-18 10:21:00 273

转载 Chapter 15_4 子模块和包

  Lua支持具有层级性的模块名,可以用一个点来分隔名称中的层级。比如,一个mod.sub模块,它就是mod的子模块。一个包(package)就是一个完整的模块树。当你require "mod.sub"时,require首先会用"mod.sub"作为key,去询问package.loaded 然后找package.preload 表。这时模块中的点" . "没有任何特殊意义。...

2016-09-13 11:35:00 70

转载 Chapter 15_3 使用环境

  创建模块的基本方法的缺点在于,忘记使用local,很容易就污染全局空间。“函数环境”是一种有趣的技术,它能够解决上面的问题。就是让模块的主程序块独占一个环境。这样不仅它的所有函数可以共享这个table,而且它的所有全局变量也都记录在这个table中。还可以将所有的公有函数声明为全局变量。这样它们就自动地记录在一个独立的table中了。模块所要做的就是将这个table赋予模...

2016-09-12 19:45:00 73

转载 Chapter 15_2 编写模块的基本方法

  在Lua中创建一个模块最简单的方法是:创建一个table。并将所有需要导出的函数放入其中,最后返回这个table。下例中的inv声明为程序块的局部变量,就是将其定义成一个私有的名称:local M = {}function M.new(r,i) return {r = r,i=i} end--defines constant 'i'M.i = M.new(...

2016-09-12 19:03:00 66

转载 Chapter 15_1 require函数

  Lua提供了一个名为require的高层函数来加载模块,但这个函数只假设了关于模块的基本概念。对于require而言,一个模块就是一段定义了一些值(函数或者包含函数的table)的代码。为了加载一个模块,只需要简单调用require "modname" 。这个函数首先会查找package.loaded表,检查modname是否加载过。如果加载过,require返回pack...

2016-09-12 18:04:00 91

转载 Chapter 15_0 模块和包

  通常,Lua不会设置规则,相反会提供很多强有力的机制来使开发者有能力实现出最适应的规则。然而,这种方法对于模块就不行了。模块系统的一个主要目标是允许以不同的形式来共享代码。但若没有一项公共的规则就无法实现这样的共享。  从Lua5.1版本开始,就为模块和包定义了一系列的规则。不统一的实现可能会使程序无法使用外部模块,或者编写的模块无法被外部程序使用。从用户观点来看,一...

2016-09-12 10:07:00 61

转载 Chapter 14_5 _ENV和load

load在加载代码块时,通常使用全局环境去初始化代码块的_ENV上值。然而,load选项的第四个参数给出的值就是供_ENV用的。(loadfile函数参数也是一样)举一个有关初始化的例子,假如我们有一个普通的配置文件,定义了一些常量和函数供程序使用。--file 'config.lua 'width = 200height = 300...然后...

2016-09-11 17:18:00 129

转载 Chapter 14_4 使用_ENV

  因为_ENV是一个普通的变量,我们可以像其他变量一样去对它进行赋值和访问。_ENV = nil上面的赋值操作,将会使得在它之后的代码块不能直接访问全局变量。不过,对控制你的代码所使用的变量有用处。local print , sin = pirnt , math.sin_ENV = nil print(13) --> 13...

2016-09-09 17:52:00 61

转载 Chapter 14_3 非全局的环境

  关于“环境”的一大问题在于它是全局的,任何对它的修改都会影响程序的所有部分。例如:若安装一个元表用于控制全局变量的访问,那么整个程序都必须遵循这个规范。当使用某个库时,没有先声明就使用了全局变量,那么这个程序就无法运行。  在Lua中,全局变量并不需要一定是全局的。甚至可以说Lua没有全局变量。听上去感觉很奇怪,因为我们一直都在使用全局变量。毫无疑问地,Lua一直在...

2016-09-08 19:59:00 69

转载 Chapter 14_2 全局变量声明

  Lua中的全局变量不需要声明就可以使用。对于小程序十分方便,但是大型程序中 一处简单的笔误就可能造成难以发现的bug。不过,这种性能可以改变。由于Lua将全局变量放在一个普通的table中,可以通过元表来改变其访问全局变量时的行为。一种方法是简单地检测所有对全局table中不存在key的访问:setmetatable(_G,{ __newindex ...

2016-09-08 19:20:00 122

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除