2013-04-08 11 views
12

は、このを見てみましょう:Python、Hexは最初の0を削除しますか?

fc = '0x' 
for i in b[0x15c:0x15f]: 
    fc += hex(ord(i))[2:] 

は、このコードは六角00 04 0Fを発見したとしましょう、代わりにそのように書くのではなく、最初の0を削除し、書き込み:04F を任意のヘルプ?

答えて

21

hex()は、先頭の0を含みませんので、これは、例えば、何が起こっている:

>>> hex(15)[2:] 
'f' 

は、あなたが常に得ることを確認するには2つの文字、あなたが必要なときに先行ゼロを追加するためにstr.zfill()を使用することができます。

​​

ここ義和がありますそれはあなたのコードに次のようになりますT:

fc = '0x' 
for i in b[0x15c:0x15f]: 
    fc += hex(ord(i))[2:].zfill(2) 
+0

よりBにおけるI [0x15c:0x15f]: \t \t H =ヘキサ(ORD(I))[2]! \t \t lenの(H)= 2の場合:H = '0' + H \t \t FC + = h; ' 友人はこれが働くと言った – thethiny

+0

最後に、適切に説明された仕事の例s! – monojohnny

+0

私はそれが適切に説明されたとは言わず、私は説明するのが最善ではない。それは16進値の10進値には何も意味しないので、先行ゼロを無視します。これらの値は、値が使用するバイト数を示します。 15 = f。 0f = 15のため、0 + 15は15 –

2
print ["0x%02x"%ord(i) for i in b[0x15c:0x15f]] 

フォーマット文字列"%2x"を使用ワイド2つの文字にするためにそれをフォーマットすることを指示し、同様に"%02x"これはまだ2つ以上で物事から先頭の0を削除することを0の

ノートでパッドにそれを伝えます16進数の値 例:"0x%02x"%0x0055 => "0x55"

0

これはまだあなたの便宜のためのグラフィカル表現です。
値は実際にはデータから削除されません。視覚的に短縮されています。

詳しいここに記述し、それがあるか、それは重要ではありません理由理由:Why are hexadecimal numbers prefixed with 0x?

+1

いいえ、それはデータから取り除かれ、私は出力を印刷してみました、そして、それは異なる値を与え、04Fがために 'あまりにも多くの異なる00040f – thethiny

11
>>> map("{:02x}".format, (10, 13, 15)) 
['0a', '0d', '0f'] 
+3

です。これは、最も上書きされた答えよりも非常に非凡です。 +1! – Antonvh