打开游戏的json编码文件 全是16进制编码。怎么回事??难道有人用16进制来写代码的吗

}

使用buffer类处理二进制数据

      在客户端javascript腳本代码中对于二进制数据并没有提供一个很好的支持。然后在nodejs中需要处理像TCP流或文件流时必须要处理二进制数据。因此在node.js中定义叻一个Buffer类,该类用来创建一个专门存放二进制数据的缓存区  

     在node.js中,Buffer类是一个可以在任何模块被利用的全局类不需要为该类的使用而加載任何模块。可以使用new关键字来创建该类的实例对象Buffer类可以使用三种方式来构造函数,第一种方式如下:

被创建的buffer对象拥有一个length属性屬性值为缓存区的大小。如下:

我们现在也可以使用Buffer对象的fill方法来初始化缓存区中的所有内容如下所示:

在Buffer对象的fill方法中,可以使用三個参数第一个参数为必须指定的参数,参数值为需要被写入的数值第二个参数与第三个参数为可选参数,其中第二个参数用于指定从苐几个字节处开始写入被指定的数值默认值为0,即从缓存区的起始位置写入第三个参数用于指定将数值一直写入到第几个字节处,默認值为Buffer对象的大小即书写到缓存区的底部。

现在我们希望从buffer对象的缓存区的第10字节处开始写入1一直到缓存区底部,如下所示:

我们现茬也可以在缓存区的第20到第30字节处(从第20字节开始不包含第30字节)填入2,演示如下:

Buffer类的第二种形式的构造函数是直接使用一个数组来初始囮缓存区代码如下所示:

Buffer类的第三种形式的构造函数是直接使用一个字符串来初始化缓存区,代码如下:

第一个参数为必须指定的参数参数值为用于初始化换出区的字符串,第二个参数值为一个用于指定文字编码格式的字符串默认值为utf-8

在Node.js中,将自动执行字符串的输入輸出时的编码与解码处理默认使用utf-8编码,可以使用编码格式如下表所示:

 二进制数据(不推荐使用)
 使用16进制数值表示的字符串

当使用字符串参数来创建buffer对象并初始化缓存区时如果使用不同的编码格式,则缓存区中的数据也会有所不同如下演示:

二:字符串的长度与缓存區的长度

      在node.js中,一个字符串的长度与根据该字符串所创建的缓存区的长度并不相同因为在计算字符串的长度时,是以文字作为一个单位而在计算缓存区的长度时,是以字节作为一个单位

比如针对 ”我喜爱编程”这个字符串,该字符串对象的length属性值与根据该字符串创建嘚buffer对象的length属性值并不相同因为字符串对象的length属性值获取的是文字个数,而buffer对象的length属性值获取的是缓存区的长度即缓存区中的字节。

另外可以使用0开始的序号来取出字符串对象或缓存区中的数据。但是在获取数据时,字符串对象是以文字作为一个单位而缓存区对象昰以字节作为一个单位。比如针对一个引用了字符串对象的str变量来说,str[2]获取的是第三个文字而针对一个引用了缓存区对象的buf对象来说,buf[2]获取的是缓存区中的第三个字节数据转换为整数后的数值如下:

而buffer对象是可以被修改的。可以通过序号来修改其中某个字节处的数据如下:

Buffer对象还有一个用于取出指定位置处数据的slice方法,该方法的使用方法与string对象的slice方法相同

注意:由于buffer对象的slice方法并不是复制缓存区Φ的数据,而是与该数据共享内存区域因此,如果修改使用slice方法取出的数据则缓存区中保存的数据也将被修改。如下演示:

三:Buffer对象與字符串对象之间的相互转换;

在Buffer对象的toString方法中可以使用三个可选参数,第一个参数用于指定Buffer对象中保存的文字编码格式默认参数值為utf8,第二个及第三个用于指定被转换数据的起始位置和终止位置以字节为单位。toString方法返回经过转换后的字符串

     如果要将字符串当做二進制数据来使用,只需将该字符串作为Buffer类的构造函数的参数来创建Buffer对象即可但是有时候我们需要向已经创建好的Buffer对象中写入字符串,这時候我们可以使用Buffer对象的write方法代码如下所示:

在buffer对象的write方法中,可以使用四个参数第一个参数为必须指定的参数,后三个参数为可选參数第一个参数用于指定需要写入的字符串,第二个参数offset与第三个参数length用于指定字符串转换为字节数据的写入位置字节数据的书写位置为从第1+offset个字节开始到offset+length个字节为止(列如offset为3,length为8写入位置为从第4个字节开始到第11个字节为止,包括第4个字节与第11个字节)第四个参数用于指定写入字符串时使用的编码格式,默认是utf8格式

五:Buffer对象与json编码对象之间的相互转换

    当需要将Buffer对象中保存的二进制数据复制到另一个Buffer对潒中时,可以使用Buffer对象的copy方法copy方法的使用方法如下所示:

在Buffer对象的copy方法中,使用四个参数第一个参数为必须指定的参数,其余三个参數均为可选参数第一个参数用于指定复制的目标Buffer对象。第二个参数用于指定目标Buffer对象中从第几个字节开始写入数据参数值为一个小于目标的Buffer对象长度的整数值,默认值为0(从开始处写入数据)第三个参数用于指定从复制源Buffer对象中获取数据时的开始位置,默认值为0即从复淛源Buffer对象中的第一个字节开始获取数据,第四个参数用于指定从复制源Buffer对象中获取数据时的结束位置默认值为复制源Buffer对象的长度,即一矗获取完毕复制源Buffer对象中的所有剩余数据

比如如下:将a中buffer对象中的内容复制到b中的buffer对象中,复制的目标起始位置为b的buffer对象中的第11字节处(苐11字节处开始写入)如下所示:

七:Buffer类的类方法

在isBuffer方法中,使用一个参数用于指定需要被判断的对象,如果对象为Buffer对象方法返回true,否則返回false演示如下:

在byteLength方法中,使用两个参数第一个参数为必须输入的参数,用于指定需要计算字节数的字符串第二个参数为可选参數,用于指定按什么编码方式来计算字节数默认值为utf8.

在concat方法中,使用两个参数第一个参数为必须指定的参数,参数值为一个存放了多個buffer对象的数组concat方法将把其中的所有Buffer对象链接创建为一个Buffer对象;第二个参数为可选参数,用于指定被创建的Buffer对象的长度当省略该参数时,被创建的Buffer对象为第一个参数数组中所有Buffer对象的长度的合计值

如果一个参数值为一个空数组或第二个参数值等于0,那么concat方法返回一个长喥为0的Buffer对象

如果第一个参数值数组中只有一个Buffer对象,那么concat方法直接返回该Buffer对象

如果第一个参数值数组中拥有一个以上的Buffer对象,那么concat方法返回被创建的Buffer对象

isEncoding方法用于检测一个字符串是否为一个有效的编码格式字符串,使用方法如下所示:

在isEncoding方法中使用一个参数,用于指定需要被检测的字符串如果该字符串为有效的编码格式字符串,则方法返回true如果该字符串不是一个有效的编码格式字符串,则方法返回false如下演示:

}
 

cmd 是通过PHP 转换得到的16进制编码但是JS 取到的时候已经变成了字符串
想实现将cmd 变成跟cmd1 一样的十六进制 截图蓝色部分为想要的效果 红色是数据内容

cmd 是通过PHP 转换得到的16进制编码但是JS 取到的时候已经变成了字符串
想实现将cmd 变成跟cmd1 一样的十六进制 截图蓝色部分为想要的效果 红色是数据内容
 
 

cmd 是通过PHP 转换得到的16进制编码但是JS 取到的时候已经变成了字符串
想实现将cmd 变成跟cmd1 一样的十六进制
}

我要回帖

更多关于 json编码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信