仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1614|回复: 11
打印 上一主题 下一主题

[学习教程] ASP.NET网页编程之关于转换QQ动静中体系心情,自界说心情和截图的函数仓酷云

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:29:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
那做企业软件是不是最好用J2EE?QQ的体系心情,自定心情和截图都是间接夹杂在笔墨信息中间接发送过去的,假如在吸收到时不加转换,间接显现,会形成乱码。因而我们要把这些信息转化下再显现。
关于这些心情,自界说心情和截图的申明以下:来历LumaQQ的代码注解
*<pre>
*一般动静的本体,其在NormalIMHeader以后
*
*一般动静中大概内嵌一些图片信息,除一般的文本以外,图片的信息格局为:
*一.缺省心情,缺省心情的前导字节是0x14,0x14以后的一个字节暗示缺省心情的索引值
*二.自界说心情,自界说心情的前导字节是0x15,0x15以后的格局为:
*1.存在性字节,假如这个心情第一次呈现,则为0x33,假如已呈现过,则为0x34,当为0x33时,前面的内容是
*i.扩大名长度,1字节,以"0"为基准,"2"则暗示长度为3
*ii.心情图片的文件名,其文件名由md5的字符串情势和扩大名组成,因而这个长度应当是32+1+3(通常为GIF)
*iii.心情的shortcut长度,以"A"为基准,假如长度是2,则这个字节是"C"
*iv.心情的shortcut
*2.假如为0x34时,则前面的内容为:
*i.1字节索引值,假设这个自界说心情呈现在第一个地位,则这个字节为"A"
*3.假如为0x36时,群内自界说心情
*i.自界说心情协定块的长度的10进制字符串情势,3字节,不敷者前部填为空格,好比为了暗示这个自界说心情用了
*88个字节,那末这个字段就是"88",呵呵,晕吧,注重这个长度是从0x15入手下手算起,一向到停止。注重这个长度
*是字节长度
*ii.心情标识,1字节,标识这个心情是新的,仍是已呈现过的,假如是新的自界说心情,用"e"暗示;假如是截图,用"k"暗示。假如是已呈现过的,
*用一个年夜写字母暗示,第一个新心情代号是A,第二个是B,以此类推
*iii.心情的快速键字节长度,1字节,用一个年夜写字母暗示,好比A暗示长度为0,顺次类推
*iv.前面的内容入手下手一向到agentkey之前的内容的长度,2字节,用16进制的字符串暗示
*v.sessionid的16进制字符串情势,8字节,不敷者后面是空格
*vi.直达服务器IP的16进制字符串情势,注重是little-endian,那末ipv4的话天然就是8个字节了
*vii.直达服务器端标语的16进制字符串情势,8个字节
*viii.fileagentkey,16字节
*ix.图片的文件名,文件名的情势是MD5的字符串情势加上点加上后缀名而成,以是通常为36个字节,可是
*我想最好仍是依据后面的长度减往其他字段的长度来判别好些
*x.快速键,长度后面已说了
*xi.一个字节,"A",多是用来分界用的
*4.假如为0x37时,群内自界说心情
*0x37暗示这个心情已在后面呈现过,拜见0x36时的格局,0x37短少0x36的iv,v,vii,viii,ix部分,
*其他部分均不异
*</pre>
代码以下:
  1. privatestringAnalyCustomFace(byte[]IMBytes){ArrayListal=newArrayList();List<string>Faces=newList<string>();byte[]tempBytes;intbytesSize=0;intshortcutSize=0;boolFaceOrPic=true;//true是自界说心情,false是截屏stringFaceName="";byte[]FaceNameBytes;byte[]facebytes;al.AddRange(IMBytes);for(inti=0;i<al.Count-1;i++){if((FaceType)al[i]==FaceType.DEFAULT&&(byte)al[i+1]>=0x40&&(byte)al[i+1]<=0xC7)//QQ的心情标记是0x14开首的,下一字节暗示心情索引号。0x15开首的是自界说心情。这里处置体系心情,以避免乱码。{stringface=string.Format("<imgsrc="face/{0}.gif"/>",al[i+1].ToString());facebytes=Encoding.GetEncoding("GBK").GetBytes(face);al.RemoveRange(i,2);al.InsertRange(i,facebytes);i+=facebytes.Length-1;continue;}if((FaceType)al[i]==FaceType.CUSTOM&&(FaceType)al[i+1]==FaceType.NEW_SERVER_SIDE_CUSTOM)//这里转换自界说心情和贴图FaceType.CUSTOM暗示是自界说心情或贴图,FaceType.NEW_SERVER_SIDE_CUSTOM暗示是在这条动静里第一次呈现的自界说心情或贴图{tempBytes=newbyte[3];//这里猎取心情数据的长度al.CopyTo(i+2,tempBytes,0,3);bytesSize=Convert.ToInt32(Encoding.GetEncoding("GBK").GetString(tempBytes));tempBytes=newbyte[bytesSize];al.CopyTo(i,tempBytes,0,bytesSize);if(tempBytes[5]==0x65)//假如是"e"暗示是自界说心情{FaceOrPic=true;}elseif(tempBytes[5]==0x6B)//假如是"k"暗示是贴图自界说心情和贴图的区分在于文件名分歧,自界说心情的文件名是MD5字串加扩大名,贴图是{GUID}加扩大名{FaceOrPic=false;}shortcutSize=(int)(tempBytes[6]-0x41);//快速键长度if(FaceOrPic){FaceNameBytes=newbyte[36];//MD5+".gif"一共36个字节Array.Copy(tempBytes,0x31,FaceNameBytes,0,36);FaceName=Encoding.GetEncoding("GBK").GetString(FaceNameBytes);stringface=string.Format("[CustomFace={0}]",FaceName);facebytes=Encoding.GetEncoding("GBK").GetBytes(face);al.RemoveRange(i,bytesSize);//删除原数据al.InsertRange(i,facebytes);//拔出本人转换后的数据}else{FaceNameBytes=newbyte[42];//{GUID}+".gif"一共42个字节Array.Copy(tempBytes,0x31,FaceNameBytes,0,42);FaceName=Encoding.GetEncoding("GBK").GetString(FaceNameBytes).Replace("{","").Replace("}","");stringface=string.Format("[CustomFace={0}]",FaceName);facebytes=Encoding.GetEncoding("GBK").GetBytes(face);al.RemoveRange(i,bytesSize);al.InsertRange(i,facebytes);}Faces.Add(FaceName);//到场行列}elseif((FaceType)al[i]==FaceType.CUSTOM&&(FaceType)al[i+1]==FaceType.EXISTING_SERVER_SIDE_CUSTOM_SIDE)//假如是本动静中已呈现过的心情或截图{tempBytes=newbyte[3];al.CopyTo(i+2,tempBytes,0,3);bytesSize=Convert.ToInt32(Encoding.GetEncoding("GBK").GetString(tempBytes));tempBytes=newbyte[bytesSize];al.CopyTo(i,tempBytes,0,bytesSize);FaceName=Faces[tempBytes[5]-0x41];//从行列中掏出stringface=string.Format("[CustomFace={0}]",FaceName);facebytes=Encoding.GetEncoding("GBK").GetBytes(face);al.RemoveRange(i,bytesSize);al.InsertRange(i,facebytes);i+=bytesSize-1;}}tempBytes=newbyte[al.Count];al.CopyTo(0,tempBytes,0,tempBytes.Length);//ArrayList转byte[]returnEncoding.GetEncoding("GBK").GetString(tempBytes);//byte[]转String}
复制代码
来自:关于转换QQ动静中体系心情,自界说心情和截图的函数
其实net网页编程之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是net网页编程的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。
蒙在股里 该用户已被删除
沙发
发表于 2015-1-21 08:31:41 | 只看该作者
Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
莫相离 该用户已被删除
板凳
发表于 2015-1-30 12:35:51 来自手机 | 只看该作者
ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。
不帅 该用户已被删除
地板
发表于 2015-1-30 22:17:03 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。
再现理想 该用户已被删除
5#
发表于 2015-2-6 16:18:34 | 只看该作者
可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。
活着的死人 该用户已被删除
6#
发表于 2015-2-6 22:49:47 | 只看该作者
ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。
老尸 该用户已被删除
7#
发表于 2015-2-19 00:38:12 | 只看该作者
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
若相依 该用户已被删除
8#
发表于 2015-3-1 15:22:34 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。
小魔女 该用户已被删除
9#
发表于 2015-3-10 19:28:58 | 只看该作者
CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。
若天明 该用户已被删除
10#
发表于 2015-3-12 03:24:54 | 只看该作者
提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。
变相怪杰 该用户已被删除
11#
发表于 2015-3-19 17:48:54 | 只看该作者
Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。
分手快乐 该用户已被删除
12#
发表于 2015-3-29 20:55:39 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-27 17:17

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表