programing

파이썬에서 0x 없이 hex()를 사용하는 방법은 무엇입니까?

yellowcard 2023. 8. 13. 09:37
반응형

파이썬에서 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)은 다음을 지정하는 포맷 사양 미니 언어를 지원합니다.x16진수의 경우.출에다음포않습다니지가 되어 있지 .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

반응형