一个小问题:把八个字符两两分开。

fibbery 2011-10-28 10:17:15
有一个字符串,例如十六进制数字:4EA11802
能否使用split函数两位两位的拆分开?拆分成:4E,A1,18,02。

多分酬谢哦!
...全文
229 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
jlfzhz 2011-11-03
  • 打赏
  • 举报
回复
正则表达式实现,个人认为才是王道。
imeuyniy 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 ccdbg 的回复:]

Perl code

#!/usr/bin/perl -w
use strict;
print "$_\n" for grep{$_}split /(..)/,'ABCDEFGH';
[/Quote]

学习学习!!!
imeuyniy 2011-10-31
  • 打赏
  • 举报
回复
用push+re很容易,
perl -le '$str="4EA11802"; while($str=~/../g){push @array,$&};print $_ foreach @array'        
4E
A1
18
02

非要用split:
perl -le '$str="4EA11802"; map{push @array,(split //,$str)[2*$_].(split //,$str)[2*$_+1]} (0..length($str)/2-1);print $_ foreach @array'
4E
A1
18
02
ccdbg 2011-10-31
  • 打赏
  • 举报
回复

#!/usr/bin/perl -w
use strict;
print "$_\n" for grep{$_}split /(..)/,'ABCDEFGH';
SChivas 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 qaz703016035 的回复:]
引用 7 楼 panzifei 的回复:
引用 6 楼 jacksonlv 的回复:
引用 4 楼 kevinhe0472 的回复:
Python code

s = '4EA11802'
list = [ s[i:i+2] for i in range(0,len(s),2) ]

人家要的是使用split()函数的:
Python code

#coding=utf-8
……
[/Quote]

晕,写错个东西:

def slpitc(s,count):
return [s[i:i+2] for i in range(0,len(s),count)]
SChivas 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 panzifei 的回复:]
引用 6 楼 jacksonlv 的回复:
引用 4 楼 kevinhe0472 的回复:
Python code

s = '4EA11802'
list = [ s[i:i+2] for i in range(0,len(s),2) ]

人家要的是使用split()函数的:
Python code

#coding=utf-8
s = '4EA11802'
slist……
[/Quote]

大虾,从效率来说

def splitCount(s, count):
return [''.join(x) for x in zip(*[list(s[z::count]) for z in range(count)])]

应该比

def slpitc(s,count):
return [s[i:i+2] for i in range(0,len(s),c)]

要慢吧?数据一大的话不知道切片是不是也会慢。。。

fibbery 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 iambic 的回复:]
没看到有简单的split的方法。
[/Quote]

是的,我问得不好,限制大家的思路了!:)
witwolf 2011-10-30
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 iambic 的回复:]

Perl code
@x = '4EA11802' =~ /../g;

没看到有简单的split的方法。
[/Quote]
iambic 2011-10-30
  • 打赏
  • 举报
回复
@x = '4EA11802' =~ /../g;

没看到有简单的split的方法。
ccdbg 2011-10-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fibbery 的回复:]

有用perl实现的吗?都可以,都有分哦!
[/Quote]

perl -e 'print "$1\n" while("4EA11802"=~/(\w{2})/g)'
proorck6 2011-10-30
  • 打赏
  • 举报
回复
@result = split /[0-9a-f]{2}/,$str;

可能还有点问题,抛砖引玉了。

lufubing 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kevinhe0472 的回复:]


s = '4EA11802'
list = [ s[i:i+2] for i in range(0,len(s),2) ]
[/Quote]
这个方法不错!
老咖啡LF 2011-10-28
  • 打赏
  • 举报
回复

s = '4EA11802'
list = [ s[i:i+2] for i in range(0,len(s),2) ]
老咖啡LF 2011-10-28
  • 打赏
  • 举报
回复

s = '4EA11802'
list = [ s[i:i+2] for i in range(0,len(s),2) ]
panzifei 2011-10-28
  • 打赏
  • 举报
回复

>>> def splitCount(s, count):
... return [''.join(x) for x in zip(*[list(s[z::count]) for z in range(count)])]
...
>>> c
'4EA11802'
>>> splitCount(c,2)
['4E', 'A1', '18', '02']
>>> def split_len(seq, length):
... return [seq[i:i+length] for i in range(0, len(seq), length)]
...
>>> split_len(c,2)
['4E', 'A1', '18', '02']
>>> def chunks(l,n):
... for i in xrange(0,len(l),n):
... yield l[i:i+n]
...
>>> list(chunks(c,2))
['4E', 'A1', '18', '02']
panzifei 2011-10-28
  • 打赏
  • 举报
回复
reference上没看到split有这功能吧?
网上倒找到几个方法,估计你也都google过了吧


def splitCount(s, count):
return [''.join(x) for x in zip(*[list(s[z::count]) for z in range(count)])]

c
'4EA11802'
splitCount(c,2)
['4E', 'A1', '18', '02']
def split_len(seq, length):
return [seq[i:i+length] for i in range(0, len(seq), length)]

split_len(c,2)
['4E', 'A1', '18', '02']
def chunks(l,n):
for i in xrange(0,len(l),n):
yield l[i:i+n]

list(chunks(c,2))
['4E', 'A1', '18', '02']
wxgiter 2011-10-28
  • 打赏
  • 举报
回复
为什么非要用split函数啊?

my $str = "4EA11802";
my @list;
my $i = 0;
for($i=0; $i<length($str); $i+=2)
{
push(@list, substr($str, $i, 2));
}
foreach(@list)
{
print;
print "\n";
}
fibbery 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 panzifei 的回复:]

先用逗号连接起来,再用逗号拆分。吃饱了没事干?这不是明显多了两步无用功

楼主都有05年这个板块的勋章了,应该是在找个高效的实现,估计数据量很大。
[/Quote]

尺有所长,寸有所短。我也不见得什么都会!懒人总是想找到最简单的方法:)

也给大家散点分嘛!:)
fibbery 2011-10-28
  • 打赏
  • 举报
回复
有用perl实现的吗?都可以,都有分哦!
panzifei 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jacksonlv 的回复:]
引用 4 楼 kevinhe0472 的回复:
Python code

s = '4EA11802'
list = [ s[i:i+2] for i in range(0,len(s),2) ]

人家要的是使用split()函数的:
Python code

#coding=utf-8
s = '4EA11802'
slist = []
for i in range(0……
[/Quote]


先用逗号连接起来,再用逗号拆分。吃饱了没事干?这不是明显多了两步无用功

楼主都有05年这个板块的勋章了,应该是在找个高效的实现,估计数据量很大。
加载更多回复(1)
用DDraw实现射击游戏说明文档 要点一:画图自动切割 IDirectDrawSurface7::BltFast()方法中没有自动切割功能,即当画图元素超出窗口以外时不会自动切割,DDraw选择自动忽略不画,造成一旦超出窗口,画图元素会突然消失。 解决这一问题的方法是手动切割,代码如下: //自动切割 RECT scRect; //存放当前窗口大小区域 ZeroMemory( &scRect, sizeof( scRect ) ); GetWindowRect( GetActiveWindow(), &scRect ); //防止图片左上角超过窗口左上角 if ( x < 0 ) { m_rect.left -= x; x = 0; } if ( y scRect.right ? scRect.right : x; y = y > scRect.bottom ? scRect.bottom : y; m_rect.right = x + m_rect.right - m_rect.left > scRect.right ? scRect.right - x + m_rect.left : m_rect.right; m_rect.bottom = y + m_rect.bottom - m_rect.top > scRect.bottom ? scRect.bottom - y + m_rect.top : m_rect.bottom; 只需将上述代码加在CGraphic::BltBBuffer() 中的m_bRect = m_rect; 前即可。 要点二:背景的滚轴实现 画背景可以分为以下三种情况: 情况一:背景图片与窗口等高 情况二:背景图片高度小于窗口高度 情况三:背景图片高度大于窗口高度 上述讲解图与代码相对应地看,有助于容易理解。 另外,要点一实现之后,由于已经可以自动切割,画背景可以用其它方法。 要点三:精灵图的实现 在游戏中,如RPG游戏中的人物图、射击类游戏的飞机、爆炸等,叫做精灵图。 精灵图实际上是将所有帧的图片放在一个文件中,游戏时靠一个RECT来控制画图像文件中的哪一部分,进而控制游戏显示哪一帧图,只需控制好RECT的位置即可。如下图: 控制RECT的四个角的坐标的移动,有以下代码: if (m_timeEnd – m_timeStart > 100) //只有到了100ms之后才绘图 { m_ImageID++; if(m_ImageID - m_beginID >= num) { m_ImageID = m_beginID; //最后一帧的下一帧是第一帧 } m_timeStart = timeGetTime(); } int id = m_ImageID++; SetRect(&m_rect, 41 * id, 0, 41 * (id + 1), 41); //飞机精灵图大小是41×41 m_pGraph->BltBBuffer(m_pImageBuffer, true, m_Pos.x, m_Pos.y, m_rect); 这样就实现了精灵动画的效果。 要点四:拿STL进行子弹的实现 子弹的实现可以使用STL中的vector,当按下开火键时发出一颗子弹,就往vector中添加一个结点;当子弹飞出窗口或击中敌机时,再将结点从vector中删除。每帧游戏画面中子弹飞行时只需将vector中的所有子弹进行处理、绘画即可。 参考代码如下: 1.添加子弹 if (g_ctrlDown) //当ctrl键按下时开炮! { m_BulletEnd = m_Gtime->GetTime(); if ((m_BulletEnd - m_BulletStart) * 1000 > 120) //如果连续按着开火键不放,这里控制不会发出太多子弹 { m_BulletStart = m_BulletEnd; MBULLET tmpBullet; tmpBullet.pos.x = m_SPos.x - 1; //记录开火时的子弹位置 tmpBullet.pos.y = m_SPos.y - 26; tmpBullet.speed = 5; //该子弹的飞行速度 m_BulletList.push_back(tmpBullet); //将子弹添加到vector中

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧