[PYTHON] 파이썬에서 16 진수로 음수 값을 변환하는 방법
PYTHON파이썬에서 16 진수로 음수 값을 변환하는 방법
바닥 2.6
>>> hex(-199703103)
'-0xbe73a3f'
>>> hex(199703103)
'0xbe73a3f'
양수 값과 음수 값이 같습니까?
calc를 사용할 때 값은 FFFFFFFFF418C5C1입니다.
해결법
-
==============================
1.파이썬의 정수는 임의로 커질 수 있습니다. 원시 2의 보수를 원하는 방식으로 계산하려면 원하는 비트 폭을 지정해야합니다. 귀하의 예는 64 비트 2의 보수로 -199703103을 표시하지만 32 비트 또는 128 비트가 될 수도 있으므로 시작시 다른 수의 0xf가됩니다.
파이썬의 정수는 임의로 커질 수 있습니다. 원시 2의 보수를 원하는 방식으로 계산하려면 원하는 비트 폭을 지정해야합니다. 귀하의 예는 64 비트 2의 보수로 -199703103을 표시하지만 32 비트 또는 128 비트가 될 수도 있으므로 시작시 다른 수의 0xf가됩니다.
hex ()는 그렇게하지 않습니다. 대안으로 다음을 제안합니다.
def tohex(val, nbits): return hex((val + (1 << nbits)) % (1 << nbits)) print tohex(-199703103, 64) print tohex(199703103, 64)
이 내용은 다음과 같이 인쇄됩니다.
0xfffffffff418c5c1L 0xbe73a3fL
-
==============================
2.파이썬 정수는 임의로 커지므로 2s 보수 표현에 필요한 비트 수로 변환을 제한하기 위해 값을 마스크해야합니다.
파이썬 정수는 임의로 커지므로 2s 보수 표현에 필요한 비트 수로 변환을 제한하기 위해 값을 마스크해야합니다.
>>> hex(-199703103 & (2**32-1)) # 32-bit '0xf418c5c1L' >>> hex(-199703103 & (2**64-1)) # 64-bit '0xfffffffff418c5c1L'
파이썬은 16 진수 (-199703103)의 간단한 경우를 2 진수 값 (-0xbe73a3f)으로 표시합니다. 왜냐하면 2의 보수 표현은 임의의 정밀도 숫자에 대해 무한 수의 F가 앞에 있기 때문입니다. 마스크 값 (2 ** 32-1 == 0xFFFFFFFF)은 다음과 같이 제한합니다.
FFF...FFFFFFFFFFFFFFFFFFFFFFFFF418c5c1 & FFFFFFFF -------------------------------------- F418c5c1
-
==============================
3.다른 출력 형식을 원하면 Marks 응답에 추가하십시오.
다른 출력 형식을 원하면 Marks 응답에 추가하십시오.
'{:X}'.format(-199703103 & (2**32-1))
-
==============================
4.
>>> import struct >>> struct.pack("i", -4) '\xfc\xff\xff\xff'
from https://stackoverflow.com/questions/7822956/how-to-convert-negative-integer-value-to-hex-in-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Miniconda에 Jupyter Notebook을 설치하십시오. (0) | 2018.11.14 |
---|---|
[PYTHON] Numpy 및 16 비트 PGM (0) | 2018.11.14 |
[PYTHON] 파이썬 팩토리 함수는 클래스와 비교된다. (0) | 2018.11.14 |
[PYTHON] 파이썬 하위 프로세스 타임 아웃? (0) | 2018.11.14 |
[PYTHON] imp를 사용하여 동적으로 모듈 가져 오기 (0) | 2018.11.14 |