注册会员 登录
aardio官方社区 返回首页

ljtnine的个人空间 http://bbs.aardio.com/?275 [收藏] [复制] [分享] [RSS]

日志

each迭代遍历javaqq网络数据

已有 763 次阅读2012-11-24 18:10 | javaqq

转自:http://www.ninecmd.com/archives/406

48 25 90 E7 //1210421479
02 07 00 32 00 00 //属性
00 08 //昵称长度
72 EC 97 38 59 29 4E 0B //独霸天下
00 04 //地区长度
6C 5F 82 CF //江苏
76 75 FF 24 //qq号码
00 00 00 3A 00 00 //属性
00 06
75 32 59 29 4E 0B //甲天下
00 04
6C 5F 82 CF
1A DD B0 02 00 27 00 2A 00 00 00 08 51 AC
65 E5 96 33 51 49 00 04 6C 5F 82 CF 6F A3 1B 8C
02 16 00 35 00 00 00 06 7F E0 67 97 4F A0 00 04
6C 5F 82 CF 4A 21 69 2B 02 10 00 40 00 00 00 06
4E 1C 53 17 86 4E 00 04 6C 5F 82 CF 23 8E 7F 28
00 E4 00 2F 00 00 00 06 65 E0 62 40 8C 13 00 04
6C 5F 82 CF 11 6B A6 89 00 9F 00 32 00 00 00 04
68 EE 67 97 00 04 6C 5F 82 CF 2A A5 DE E0 00 FC
00 2A 00 00 00 06 9F 99 4E 2D 9F 99 00 04 6C 5F
82 CF 83 C8 84 25 02 1C 00 37 00 00 00 04 52 18
5D E5 00 04 6C 5F 82 CF 0E BB 1A A0 00 00 00 3C
00 00 00 06 7A 0B 5B 9D 8D 1D 00 04 6C 5F 82 CF
8D 53 70 DF 02 25 00 34 00 00 00 0C 53 56 96 E8
82 B1 77 F3 76 84 4E BA 00 04 6C 5F 82 CF 13 CC
11 FC 00 2A 00 3A 00 00 00 04 80 01 00 4B 00 04
6C 5F 82 CF 2D C1 A8 AF 00 BA 00 37 00 00 00 04
6D 77 6D 9B 00 04 6C 5F 82 CF 73 04 14 A1 02 1C
00 34 00 00 00 06 80 01 53 57 4E AC 00 04 6C 5F
82 CF 13 C4 AA 0A 00 69 00 36 00 00 00 04 71 36
67 97 00 04 6C 5F 82 CF 14 A8 B4 CF 01 1D 00 2B
00 00 00 0C 6C 99 4E 09 5C 0F 67 68 53 6B 6C 11
00 04 6C 5F 82 CF 22 16 86 17 00 06 00 2A 00 00
00 04 96 3F 65 87 00 04 6C 5F 82 CF 75 1F 32 06
02 6A 00 35 00 00 00 04 73 CD 60 DC 00 04 6C 5F
82 CF 3D 17 1D 8B 00 00 00 40 00 00 00 06 00 6A
00 69 00 61 00 04 6C 5F 82 CF

javaqq数据如上,是一段带有结构的二进制数据,其中昵称长度和地区长度为可变数据。循环字符串截取要写很长的代码。但是用each函数可以把变量封闭,简化编程。

import fsys.codepage
each = 
function(str){

    var offset = 0
    
return function(){
        
if(offset>#str-4){
            
return null,null;
        }
        
var nickset = offset + 12
        
var nicklen = ..string.unpack( ..string.sub(str,nickset,nickset) )
        
var nickname = ..string.fromUnicode( ..fsys.codepage.reverseEndian(..string.sub( str,nickset+1,nickset+nicklen )) )
        
var addrset = nickset + nicklen + 2
        
var addrlen = ..string.unpack( ..string.sub(str,addrset,addrset) )
        
var addrname = ..string.fromUnicode( ..fsys.codepage.reverseEndian(..string.sub( str,addrset+1,addrset+addrlen )) )
        offset = addrset+addrlen
        
return nickname,addrname;
}
}

io.open();

str = 
'\x1A\xDD\xB0\x02\x00\x27\x00\x2A\x00\x00\x00\x08\x51\xAC\x65\xE5\x96\x33\x51\x49\x00\x04\x6C\x5F\x82\xCF'
++
'\x6F\xA3\x1B\x8C\x02\x16\x00\x35\x00\x00\x00\x06\x7F\xE0\x67\x97\x4F\xA0\x00\x04\x6C\x5F\x82\xCF'
++ 
'\x23\x8E\x7F\x28\x00\xE4\x00\x2F\x00\x00\x00\x06\x65\xE0\x62\x40\x8C\x13\x00\x04\x6C\x5F\x82\xCF\x11'

for( name,address in each(str) ){
    io.print( name,address )
}


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2017-10-23 05:09 , Processed in 0.046875 second(s), 13 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

返回顶部