HZK
@HZK (Ritoku Sakamae)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

16進数のint型数値を、そのままの表記で元のint型に戻すことは可能ですか

解決したいこと

16進数のint型数値を、str型にする方法は複数ありますが、開始点である元のint型に戻すことができません。必ず10進数の数値になってしまいます。

また、これと関連しますが、16進数のint型数値を要素とするリストを、そのままの状態で出力する方法も分かりません。printすると10進数の要素となってしまいます。
色々調べましたが、分かりませんでした。

計算上不要ということは何となく理解できるので、表記上の疑問ともいえます。
もし、不可能だとするならば、16進数のint型数値に戻ることは、コード上はそもそも不要という考え方でしょうか。

必要性の有無の考え方も含めて、ご教授お願い致します。

該当するソースコード

# -*- coding: utf-8 -*-

#開始点
n = 0x3421
print(type(n))
#<class 'int'>

hn = hex(n)
print(hn)
print(type(hn))
#0x3421
#<class 'str'>

result = f'{n:#x}'
print(result)
print(type(result))
#0x3421
#<class 'str'>

h_lt = [0x0, 0x16, 0x15, 0x0, 0x6, 0x7, 0x14]
print(h_lt)
#[0, 22, 21, 0, 6, 7, 20]
0

2Answer

int型は数値を保持するのみで、表記に関する情報は持ちません。

Pythonのint型は数値そのものを扱います。そのため、0xで始まる16進数のリテラルであっても、int型に変換されると10進数として内部的に扱われます。int型を文字列に変換した際には、どのように表現するか(10進数、16進数など)は出力時のフォーマット次第です。

0Like

16進数のint型数値を、str型にする方法は複数ありますが、開始点である元のint型に戻すことができません。必ず10進数の数値になってしまいます。

コンピューターの中では整数は 2 進数で、そこは何をどうしようと変わらず、10/16 進数うんぬんはプログラムでの書き方とかコンソールに表示するときなどにどういう形で表示するかの書式設定の問題ということは理解されてますか。

(追記: 上に書いた 2 進数というのは Python では違って、Python 独自の内部表現になるようですね。失礼しました)

文字列はそれとは違う話で、整数を文字列に変換すると 2 進数とは別の形、例えば Windows OS 内部では unicode (UTF−16) でメモリに保持されます。

0Like

Your answer might help someone💌