파이썬에서 0x 없이 hex()를 사용하는 방법은 무엇입니까?
그hex()
function은 인 파에서함수, 선두문넣습다니를을 .0x
할 ?그것들을 넣지 말라고 말할 방법이 있을까요? 그래서.0xfa230
▁▁be 될 것입니다.fa230
.
코드는
import fileinput
f = open('hexa', 'w')
for line in fileinput.input(['pattern0.txt']):
f.write(hex(int(line)))
f.write('\n')
(권장)
Python 3 f-string:@GringoSuave가 대답했습니다.
>>> i = 3735928559
>>> f'{i:x}'
'deadbeef'
대안:
format
내장 기능(단일 값에만 적합)
>>> format(3735928559, 'x')
'deadbeef'
그리고 때때로 우리는 특정 상황에서 여전히 포맷을 사용해야 할 수도 있습니다. @Eumiro
( 추천하고 f-strings
대부분의 경우)
>>> '{:x}'.format(3735928559)
'deadbeef'
(레거시)f-strings
당신의 모든 요구를 해결해야 하지만 스타일 포맷은 우리가 @msvalkon에서 하던 것입니다.
>>> '%x' % 3735928559
'deadbeef'
문자열 형식 @jsbueno 없음
>>> i = 3735928559
>>> i.to_bytes(4, "big").hex()
'deadbeef'
해키 앤서(회피)
hex(i)[2:]
@기욤 르메트르
>>> i = 3735928559
>>> hex(i)[2:]
'deadbeef'
이는 포맷을 위해 특별히 만들어진 기능/방법을 사용하는 대신 문자열 슬라이싱에 의존합니다.hex
이러한 이유로 음수에 대해 예상치 못한 출력을 제공할 수 있습니다.
>>> i = -3735928559
>>> hex(i)[2:]
'xdeadbeef'
>>> f'{i:x}'
'-deadbeef'
다음 코드 사용:
'{:x}'.format(int(line))
숫자를 지정할 수도 있습니다.
'{:06x}'.format(123)
# '00007b'
Python 2.6의 경우 사용
'{0:x}'.format(int(line))
또는
'{0:06x}'.format(int(line))
당신은 간단하게 쓸 수 있습니다.
hex(x)[2:]
처음 두 문자를 제거합니다.
파이썬 3.6+:
>>> i = 240
>>> f'{i:x}' # 02x to pad with zeros
'f0'
이전 스타일 문자열 형식:
In [3]: "%x" % 127
Out[3]: '7f'
새로운 스타일
In [7]: '{:x}'.format(127)
Out[7]: '7f'
대문자를 형식 문자로 사용하면 대문자 16진수가 생성됩니다.
In [8]: '{:X}'.format(127)
Out[8]: '7F'
의사들이 왔습니다.
'x'
9 이상의 숫자에 소문자를 사용하여 16진수로 숫자를 출력합니다.
>>> format(3735928559, 'x')
'deadbeef'
'X'
9 이상의 숫자에 대문자를 사용하여 16진수를 출력합니다.
>>> format(3735928559, 'X')
'DEADBEEF'
이에 대한 자세한 내용은 Python의 설명서에서 확인할 수 있습니다.
F-스트링
Python 3의 포맷된 리터럴 문자열(f-strings)은 다음을 지정하는 포맷 사양 미니 언어를 지원합니다.x
16진수의 경우.출에다음포않습다니지가 되어 있지 .0x
.
이렇게 할 수 있습니다.
>>> f"{3735928559:x}"
'deadbeef'
이진법, 팔진법 등의 다른 기준은 사양을 참조하십시오.
편집:str.removeprefix
Python 3.9 이후로, 다음과 같은 더 명확한 코드를 작성할 수 있는 방법이 있습니다.
>>> hexadecimal = hex(3735928559)
>>> hexadecimal.removeprefix('0x')
'deadbeef'
음수에 대해서는 작동하지 않습니다. ❌:
>>> negadecimal = hex(-3735928559)
>>> negadecimal.removeprefix('0x')
'-0xdeadbeef'
문자열 형식 지정을 거치는 것 외에도 숫자와 16진수 표현을 다룰 때 일반적으로 바이트 콘텐츠를 다루고 바이트가 어떻게 관련되는지에 관심이 있다는 점을 염두에 두는 것이 흥미롭습니다.
그bytes
와 Python 3.x 시리즈에 대한 메소드로 강화되었습니다.int.to_bytes
와 결합하여bytes.hex()
변환의 의미를 보존하면서 16진수 출력에 대한 완전한 제어를 제공합니다(물론, 숫자를 요구하는 이진 프로토콜에서 사용할 준비가 된 중간 "바이트" 개체 유지).
In [8]: i = 3735928559
In [9]: i.to_bytes(4, "big").hex()
Out[9]: 'deadbeef'
그외,bytes.hex()
16진수에 대한 구분 기호를 지정하는 등 출력을 어느 정도 제어할 수 있습니다.
In [10]: bytes.hex?
Docstring:
Create a string of hexadecimal numbers from a bytes object.
sep
An optional single character or byte to separate hex bytes.
bytes_per_sep
How many bytes between separators. Positive values count from the
right, negative values count from the left.
Example:
>>> value = b'\xb9\x01\xef'
>>> value.hex()
'b901ef'
>>> value.hex(':')
'b9:01:ef'
>>> value.hex(':', 2)
'b9:01ef'
>>> value.hex(':', -2)
'b901:ef'
(즉, 대부분의 시나리오에서는 빠른 인쇄가 필요하며, 수락된 답변과 같이 f-string 포맷을 수행할 것입니다.f"{mynumber:04x}"
"기억할 것이 적다"는 단순한 이유로)
이전의 모든 답변은 효과가 있겠지만, 대부분의 답변은 양수와 음수를 모두 처리할 수 없거나 Python 2 또는 3에서만 작동하는 등의 주의 사항을 가지고 있습니다.아래 버전은 Python 2와 3 모두에서 작동하며 양수와 음수에 대해 작동합니다.
Python은 hex()에서 문자열 16진수 값을 반환하기 때문에 문자열의 위치에 관계없이 string.replace를 사용하여 0x 문자를 제거할 수 있습니다(양의 숫자와 음의 숫자가 다르기 때문에 중요함).
hexValue = hexValue.replace('0x','')
편집: wjandrea는 위의 구현이 int 리터럴에서 발생할 수 있는 0x 대신 0X를 포함하는 값을 처리하지 않는다는 점에서 좋은 지적을 했습니다.이 사용 사례를 염두에 두고 Python 2 및 3에 대해 대소문자를 구분하지 않는 다음 구현을 사용할 수 있습니다.
import re
hexValue = re.sub('0x', '', hexValue, flags=re.IGNORECASE)
십진수에서 십진수로, 작동했습니다.
hex(number).lstrip("0x").rstrip("L")
언급URL : https://stackoverflow.com/questions/16414559/how-to-use-hex-without-0x-in-python
'programing' 카테고리의 다른 글
오류: 리소스 Android:attr/fontVariationSettings를 찾을 수 없습니다. (0) | 2023.08.13 |
---|---|
일시적인 데드존이란 무엇입니까? (0) | 2023.08.13 |
활동과 단편 활동의 차이 (0) | 2023.08.13 |
SQL Server에서 교착 상태를 시뮬레이션하는 방법은 무엇입니까? (0) | 2023.08.13 |
각도 2에서 편집 가능한 div의 콘텐츠에서 [(ngModel)]을 사용하는 방법은? (0) | 2023.08.13 |