Python论坛  - 讨论区

标题:[python-chinese] 问一个比较简单的问题, 数制转换

2005年08月02日 星期二 21:57

泰传 温 wendwghit at yahoo.com.cn
Tue Aug 2 21:57:29 HKT 2005

纯粹的十六进制字符串如何转换成十六进制数,
如"AB0123" 转换成十六进制数AB0123(即0xAB, 0x01, 0x23)
谢谢

__________________________________________________
赶快注册雅虎超大容量免费邮箱?
http://cn.mail.yahoo.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050802/caa08432/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月02日 星期二 22:04

Qiangning Hong hongqn at gmail.com
Tue Aug 2 22:04:44 HKT 2005

On 8/2/05, 泰传 温 <wendwghit at yahoo.com.cn> wrote:
> 纯粹的十六进制字符串如何转换成十六进制数, 
> 如"AB0123" 转换成十六进制数AB0123(即0xAB, 0x01, 0x23) 
> 谢谢

.>>> int('AB0123', 16)
11206947
.>>> '%x' % 11206947
'ab0123'

-- 
Qiangning Hong

I'm usually annoyed by IDEs because, for instance, they don't use VIM
as an editor. Since I'm hooked to that, all IDEs I've used so far have
failed to impress me.
   -- Sybren Stuvel @ c.l.python

Get Firefox! <http://www.spreadfirefox.com/?q=affiliates&id=67907&t=1>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月02日 星期二 22:12

nEO (a.k.a. gentoo.cn) gentoo.cn at gmail.com
Tue Aug 2 22:12:51 HKT 2005

在 05-8-2,泰传 温<wendwghit at yahoo.com.cn> 写道:
> 纯粹的十六进制字符串如何转换成十六进制数, 
> 如"AB0123" 转换成十六进制数AB0123(即0xAB, 0x01, 0x23) 
> 谢谢

from string import atoi
atoi('0xAB0123', 0x)

py->>> atoi('0xAB0123', 0x)
11206947
-- 
I'm the one, powered by nEO

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月02日 星期二 22:52

泰传 温 wendwghit at yahoo.com.cn
Tue Aug 2 22:52:48 HKT 2005

不仅仅这样, 而是一串特别特别长的十六进制字符串,其实就是网络数据流了, 如何转换成十六进制数, 即每两个字符是一个十六进制数, 即 “01”表示 0x01

"nEO (a.k.a. gentoo.cn)" <gentoo.cn at gmail.com> 写道:在 05-8-2,泰传 温 写道:
> 纯粹的十六进制字符串如何转换成十六进制数, 
> 如"AB0123" 转换成十六进制数AB0123(即0xAB, 0x01, 0x23) 
> 谢谢

from string import atoi
atoi('0xAB0123', 0x)

py->>> atoi('0xAB0123', 0x)
11206947
-- 
I'm the one, powered by nEO
_______________________________________________
python-chinese list
python-chinese at lists.python.cn
http://python.cn/mailman/listinfo/python-chinese


__________________________________________________
赶快注册雅虎超大容量免费邮箱?
http://cn.mail.yahoo.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050802/4a196183/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月02日 星期二 23:09

倪正刚 ni at twinisa.com
Tue Aug 2 23:09:34 HKT 2005

我想你应该把这个长长的数据流分段进行转换,利用readline或者从缓冲区内读取一段
转换一段。
没研究过这个,不过可以把你的想法告诉大家,是准备做什么用的呢?
  -----Original Message-----
  From: python-chinese-bounces at lists.python.cn
[mailto:python-chinese-bounces at lists.python.cn]On Behalf Of 泰传 温
  Sent: 2005年8月2日 22:53
  To: nEO (a.k.a. gentoo.cn); python-chinese at lists.python.cn
  Subject: 回复: Re: [python-chinese] 问一个比较简单的问题, 数制转换


  不仅仅这样, 而是一串特别特别长的十六进制字符串,其实就是网络数据流了, 如
何转换成十六进制数, 即每两个字符是一个十六进制数, 即 “01”表示 0x01

  "nEO (a.k.a. gentoo.cn)" <gentoo.cn at gmail.com> 写道:
    在 05-8-2,泰传 温 写道:
    > 纯粹的十六进制字符串如何转换成十六进制数,
    > 如"AB0123" 转换成十六进制数AB0123(即0xAB, 0x01, 0x23)
    > 谢谢

    from string import atoi
    atoi('0xAB0123', 0x)

    py->>> atoi('0xAB0123', 0x)
    11206947
    --
    I'm the one, powered by nEO
    _______________________________________________
    python-chinese list
    python-chinese at lists.python.cn
    http://python.cn/mailman/listinfo/python-chinese

  __________________________________________________
  赶快注册雅虎超大容量免费邮箱?
  http://cn.mail.yahoo.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050802/ec39d0e9/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月02日 星期二 23:14

Qiangning Hong hongqn at gmail.com
Tue Aug 2 23:14:07 HKT 2005

[标题怎么变成乱码了?改回原来的标题了。]

On 8/2/05, 泰传 温 <wendwghit at yahoo.com.cn> wrote:
> "nEO (a.k.a. gentoo.cn)" <gentoo.cn at gmail.com> 写道: 
> > from string import atoi
> > atoi('0xAB0123', 0x)
> 
> > py->>> atoi('0xAB0123', 0x)
> > 11206947

在Python3000里string模块会被取消,还是用int来转换更加pythonic一些。

> 不仅仅这样, 而是一串特别特别长的十六进制字符串,其实就是网络数据流了, 如何转换成十六进制数, 即每两个字符是一个十六进制数, 即 "01"表示
> 0x01
> 

你想把一长串十六进制字符串变成一个数?那得要能表示的下才行。

.>>> int('A'*100, 16)
17214999187246057264372794480020079162198038618861490085537729043604317480112274
63086430235520091887623935447981831662250L

.>>> int('A'*10000000000, 16)
Traceback (most recent call last):
  File "", line 1, in ?
OverflowError: long int too large to convert to int

-- 
Qiangning Hong

I'm usually annoyed by IDEs because, for instance, they don't use VIM
as an editor. Since I'm hooked to that, all IDEs I've used so far have
failed to impress me.
   -- Sybren Stuvel @ c.l.python

Get Firefox! <http://www.spreadfirefox.com/?q=affiliates&id=67907&t=1>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月02日 星期二 23:19

泰传 温 wendwghit at yahoo.com.cn
Tue Aug 2 23:19:48 HKT 2005

其实就是两个节点之间通过TCP/IP在传递数据,而这些数据是有格式的,所以想作个小工具把这些有格式的数据自动分析出来,而输入的串就是这些带格式的数据,如:
struct A
{
 unsigned short a;
unsigned short b;
 
}
 
A c;
c.a = 0x1122;
c.b = 0x3344;
 
把c送出去就是“11223344”, 现在我要在接受端把这些数据从新解析成
c.a == 0x1122, c.b == 0x3344, 其实不是很负责, 就是想了解有没有比较好的方法或库函数


倪正刚 <ni at twinisa.com> 写道:
我想你应该把这个长长的数据流分段进行转换,利用readline或者从缓冲区内读取一段转换一段。
没研究过这个,不过可以把你的想法告诉大家,是准备做什么用的呢?
-----Original Message-----
From: python-chinese-bounces at lists.python.cn [mailto:python-chinese-bounces at lists.python.cn]On Behalf Of 泰传 温
Sent: 2005年8月2日 22:53
To: nEO (a.k.a. gentoo.cn); python-chinese at lists.python.cn
Subject: 回复: Re: [python-chinese] 问一个比较简单的问题, 数制转换


不仅仅这样, 而是一串特别特别长的十六进制字符串,其实就是网络数据流了, 如何转换成十六进制数, 即每两个字符是一个十六进制数, 即 “01”表示 0x01

"nEO (a.k.a. gentoo.cn)" <gentoo.cn at gmail.com> 写道: 在 05-8-2,泰传 温 写道:
> 纯粹的十六进制字符串如何转换成十六进制数, 
> 如"AB0123" 转换成十六进制数AB0123(即0xAB, 0x01, 0x23) 
> 谢谢

from string import atoi
atoi('0xAB0123', 0x)

py->>> atoi('0xAB0123', 0x)
11206947
-- 
I'm the one, powered by nEO
_______________________________________________
python-chinese list
python-chinese at lists.python.cn
http://python.cn/mailman/listinfo/python-chinese


__________________________________________________
赶快注册雅虎超大容量免费邮箱?
http://cn.mail.yahoo.com
_______________________________________________
python-chinese list
python-chinese at lists.python.cn
http://python.cn/mailman/listinfo/python-chinese

__________________________________________________
赶快注册雅虎超大容量免费邮箱?
http://cn.mail.yahoo.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050802/5fe000b1/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月02日 星期二 23:21

泰传 温 wendwghit at yahoo.com.cn
Tue Aug 2 23:21:30 HKT 2005

没有啊,我只是在回复标题前面加上了个Re:

Qiangning Hong <hongqn at gmail.com> 写道:[标题怎么变成乱码了?改回原来的标题了。]

On 8/2/05, 泰传 温 wrote:
> "nEO (a.k.a. gentoo.cn)" 写道: 
> > from string import atoi
> > atoi('0xAB0123', 0x)
> 
> > py->>> atoi('0xAB0123', 0x)
> > 11206947

在Python3000里string模块会被取消,还是用int来转换更加pythonic一些。

> 不仅仅这样, 而是一串特别特别长的十六进制字符串,其实就是网络数据流了, 如何转换成十六进制数, 即每两个字符是一个十六进制数, 即 "01"表示
> 0x01
> 

你想把一长串十六进制字符串变成一个数?那得要能表示的下才行。

.>>> int('A'*100, 16)
17214999187246057264372794480020079162198038618861490085537729043604317480112274
63086430235520091887623935447981831662250L

.>>> int('A'*10000000000, 16)
Traceback (most recent call last):
File "", line 1, in ?
OverflowError: long int too large to convert to int

-- 
Qiangning Hong

I'm usually annoyed by IDEs because, for instance, they don't use VIM
as an editor. Since I'm hooked to that, all IDEs I've used so far have
failed to impress me.
-- Sybren Stuvel @ c.l.python

Get Firefox! 
_______________________________________________
python-chinese list
python-chinese at lists.python.cn
http://python.cn/mailman/listinfo/python-chinese


		
---------------------------------
DO YOU YAHOO!?
  雅虎邮箱超强增值服务-2G超大空间、pop3收信、无限量邮件提醒 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050802/5f6bfef4/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年08月02日 星期二 23:28

Qiangning Hong hongqn at gmail.com
Tue Aug 2 23:28:48 HKT 2005

[请不要top-posting。请把你的回复写在引言的下方,并裁剪引言至只保留和你的回复相关内容]

On 8/2/05, 泰传 温 <wendwghit at yahoo.com.cn> wrote:
> 其实就是两个节点之间通过TCP/IP在传递数据,而这些数据是有格式的,所以想作个小工具把这些有格式的数据自动分析出来,而输入的串就是这些带格式的数据,如:
> struct A 
> { 
>  unsigned short a; 
> unsigned short b; 
> } 
>   
> A c; 
> c.a = 0x1122; 
> c.b = 0x3344; 
>   
> 把c送出去就是"11223344", 现在我要在接受端把这些数据从新解析成 
> c.a == 0x1122, c.b == 0x3344, 其实不是很负责, 就是想了解有没有比较好的方法或库函数 

你确信你发出去的是"11223344"不是"\x11\x22\x33\x44"?
如果是后者的话,你可以采用struct模块。

前者你就要自己解析字符串了,可以用我前一封信给出的list comprehension,重贴在这里:

.>>> hexstr = 'AABBCCDD0011'
.>>> [int(hexstr[i:i+2], 16) for i in xrange(0, len(hexstr), 2)]
[170, 187, 204, 221, 0, 17]

-- 
Qiangning Hong

I'm usually annoyed by IDEs because, for instance, they don't use VIM
as an editor. Since I'm hooked to that, all IDEs I've used so far have
failed to impress me.
   -- Sybren Stuvel @ c.l.python

Get Firefox! <http://www.spreadfirefox.com/?q=affiliates&id=67907&t=1>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号