[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 04/08 07:38 / Filesize : 228 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれPython(超初心者用) その16



1 名前:デフォルトの名無しさん mailto:sage [2013/01/21(月) 16:36:03.35 ]
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。

エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>985 辺りで

前スレ
くだすれPython(超初心者用) その15
toro.2ch.net/test/read.cgi/tech/1350718465/
関連スレ
Pythonのお勉強 Part48
toro.2ch.net/test/read.cgi/tech/1358750040/
【実験台】 Python 3.0 のお勉強 Part 1 【非互換】
toro.2ch.net/test/read.cgi/tech/1235050215/
◆関連リンク
Python の Home Page
ttp://www.python.org/

975 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 16:36:37.81 ]
質問です
ある文字列 ( 0-9 a-f A-F のみが含まれる)
'123456789abcdeff0123456789abcdef' ...
から
[0x1234, 0x5678, 0x9abc, 0xdeff, 0x0123, 0x4567, 0x89ab, 0xcdef] ...
という 2byte 毎の値のリストを得るにはどんな書き方がありますか?
文字列の長さは常に 8 の倍数ですが最大の長さは不明です(どこまでも大きくなる可能性あり)

976 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 16:56:25.98 ]
どこまでも大きくなるってのは例えばSocketStreamがReadしないとデータがあるかどうか分からないような状況を言っているのか?
それとも1024か32768か2^32か不明なだけで、処理するときには判明しているのか?

977 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 17:02:20.74 ]
>>975
>>> s = '123456789abcdeff0123456789abcdef'
>>> [int(s[i:i+4], 16) for i in range(0, len(s), 4)]
[4660, 22136, 39612, 57087, 291, 17767, 35243, 52719]
>>> [hex(int(s[i:i+4], 16)) for i in range(0, len(s), 4)]
['0x1234', '0x5678', '0x9abc', '0xdeff', '0x123', '0x4567', '0x89ab', '0xcdef']

これでいいのかなあ。なんかやりたいこととは違う気がしなくもない

978 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 17:02:46.49 ]
いや、そもそもPythonの文字列は長さが判明してないとおかしいから、
質問者が文字列から、と言っている以上、前者ではありえない。

['0x'+s[i:i+4] for i in range(0,len(s),4)]

979 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 17:06:10.24 ]
f = StringIO(s)
[int(i, 16) for i in iter(lambda: f.read(4), '')]

980 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 17:07:42.97 ]
import struct, binascii
struct.unpack('>%dh' % (len(s) / 4), binascii.a2b_hex(s))

981 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 17:13:59.20 ]
みなさんありがとうございます
stream から読むのをイメージしていました
>>979 さんのが一番良いみたいです

あとお願いついでですが
'123456789abcdeff0123456789abcdef' ...
から
[(0x1234, 0x5678), (0x9abc, 0xdeff), (0x0123, 0x4567), (0x89ab, 0xcdef)] ...
の様にペアにしたタプルで得るにはどう書けば良いですか?

982 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 17:20:20.54 ]
[(int(i, 16),int(j, 16)) for i,j in iter(lambda: (f.read(4),f.read(4)), ('',''))]

983 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 17:22:52.44 ]
import StringIO, struct, binascii
s = '123456789abcdeff0123456789abcdef'
f = StringIO.StringIO(s)
[struct.unpack('>2h', binascii.a2b_hex(i)) for i in iter(lambda: f.read(8), '')]
[(4660, 22136), (-25924, -8449), (291, 17767), (-30293, -12817)]



984 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 17:28:53.08 ]
くだすれPython(超初心者用) その17
toro.2ch.net/test/read.cgi/tech/1365323116/

985 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 17:33:54.01 ]
おつぱいそん

986 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 17:35:41.43 ]
g = (int(i, 16) for i in iter(lambda: f.read(4), ''))
# itertools レシピのgrouper
list(itertools.izip_longest(*([g]*2), fillvalue=None))

987 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 17:46:08.46 ]
int(i, 16) のところで符号付整数にするにはどうすればいい?

988 名前:デフォルトの名無しさん [2013/04/07(日) 17:48:13.75 ]
python3を積極的に導入する理由ってある?
python2でできない、あるいは難しいこととかあるのかな

989 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 17:50:09.54 ]
ちょっと訂正
int(i, 16) のところで16ビット符号付整数にするにはどうすればいい?

990 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 17:57:27.42 ]
32767より大きいなら65536を引く

991 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 18:03:21.42 ]
それでもいいんだけど
int() になんか便利なオプションあるのかなと思って

992 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 18:04:41.99 ]
>>982 >>983 >>986
出来ました
ありがとうございます

993 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 18:17:04.13 ]
pythonはCのscanfみたいなのとかないのかな。



994 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 18:22:36.47 ]
Python には現在のところ、scanf()に相当するものがありません。
約 1,220 件 (0.39 秒)

995 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 18:28:46.30 ]
正規表現で大概のことは出来るんじゃないかなと思う

996 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 18:29:38.95 ]
2から3に乗り換える利点は何ですか?

997 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 18:32:45.39 ]
デメリットはお前のような奴がいることです

998 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 18:37:02.72 ]
scanfって正規表現使えたっけ

999 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 18:37:46.57 ]
>>991
無いよ。

1000 名前:デフォルトの名無しさん mailto:sage [2013/04/07(日) 18:38:53.88 ]
>>989
16bit目が1なら全bit反転して+1

1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<228KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef