2016/11/08

[py]エンディアンをひっくり返す(bytearrayの)

pythonをいま使っている範囲では、凝った使い方は全然していない。
計算して、printするくらいだ。

そうなるとどうなるかというと・・・ネタがすぐに切れるということになる。
しばらくpythonネタを続けられるとほくそ笑んでいたのだが。。。

 

小ネタとして、エンディアンをひっくり返す話でも書くとしよう。

struct系のAPIには、<や>を使ってエンディアンを変更する方法があるけれども、bytearrayになっているものは特にAPIが無さそうだった。
自力で回す関数を作ったのだけど、こんなのでよいのか?

def reverse_endian(msg):
    rev = ''
    for lp in msg:
        rev = lp + rev
    return rev

うん、forで1byteずつ抜き出して、頭に追加するだけだ。
間違ってはいないと思うが、まだ格好のよい方法があるのかもしれん。

 

まだdecode('hex')する前の文字列でも、エンディアンを変更したいことがあった。
そっちは、こうやっている。

def reverse_endian_str(msg):
    rev = ''
    for lp in range(0, len(msg) / 2):
        rev = msg[lp * 2: lp * 2 + 2] + rev
    return rev

うーん、2つずつスキップする方法もなさそうだったから、先頭から2文字ずつ抜き出して先頭に追加する、をやっただけだ。
そのまますぎるのだけど、他にないよね?ないよね??

 

最近の言語だから、なんか格好のよいやり方があるかも!と模索して時間を費やしてしまうことが多いのだが、大したことない作業だったら自分でやる、という方がスクリプトとしては良いのかもしれない、と思うことにしよう。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。