web-dev-qa-db-ja.com

pythonで文字列を16進数に変換します

引数に16進数をとる関数を呼び出すスクリプトがあります。引数には0xプレフィックスが必要です。データソースはデータベーステーブルであり、文字列として格納されるため、「0x77」が返されます。データベースから文字列を取得し、0xプレフィクスを持つ16進形式の引数として使用する方法を探しています。

これは動作します:

addr = 0x77
value = class.function(addr)

データベースエントリは文字列である必要があります。他のほとんどのレコードではこの列に16進値がないため、値を変更して簡単にするため、「0x77」の代わりに「119」にすることができます。

13
Edyoucaterself

_class.function_には、10進数または16進数literalで表現できるintegerが必要です。呼び出しは完全に同等です:

_class.function(0x77)
class.function(119)  # 0x77 == 119
_

print(0x77)でも_119_と表示されます(10進数がデフォルトの表現であるため)。

したがって、文字列表現をintegerに変換することについて話す必要があります。文字列は、 '0x77'のような16進表現にすることができ、ベースパラメータで解析します。

_ >>> int('0x77', 16)
 119
_

または10進数の場合は、int('119')として解析します。

それでも、整数を扱うときは常に整数を保存する方が適切です。

編集:@gnibblerが示唆したように、両方の形式を処理するint(x, 0)として解析できます。

12
bereal
>>> hex(119)
'0x77'
#or:
>>> hex(int("119"))
'0x77'

これはあなたのために働くはずです。

文字の16進表現も取得できます。

>>> hex(ord("a"))
'0x61'
7
icedtrees

データベースから文字列を読み取り、それを整数に変換したいと言っていると思います。文字列に0xプレフィックスがある場合、次のように変換できます。

>>> print int("0x77", 16)
119

そうでない場合:

>>> print int("119")
119
0
Guy Sirton