반응형
16진수로 인코딩된 ASCII 문자열을 일반 ASCII로 변환하시겠습니까?
파이썬에서 16진수에서 일반 ASCII로 변환하려면 어떻게 해야 합니까?
예를 들어 "0x7061756c"를 "폴"로 변환하려고 합니다.
조금 더 간단한 솔루션:
>>> "7061756c".decode("hex")
'paul'
라이브러리를 가져올 필요가 없습니다.
>>> bytearray.fromhex("7061756c").decode()
'paul'
>>> txt = '7061756c'
>>> ''.join([chr(int(''.join(c), 16)) for c in zip(txt[0::2],txt[1::2])])
'paul'
저는 그저 즐기고 있을 뿐이지만, 중요한 부분은 다음과 같습니다.
>>> int('0a',16) # parse hex
10
>>> ''.join(['a', 'b']) # join characters
'ab'
>>> 'abcd'[0::2] # alternates
'ac'
>>> zip('abc', '123') # pair up
[('a', '1'), ('b', '2'), ('c', '3')]
>>> chr(32) # ascii to character
' '
이제 binasci를 보겠습니다...
>>> print binascii.unhexlify('7061756c')
paul
멋져요 (그리고 왜 다른 사람들이 도움이 되기 전에 당신이 후프를 통과하도록 만들고 싶은지 모르겠어요).
Python 2의 경우:
>>> "7061756c".decode("hex")
'paul'
Python 3의 경우:
>>> bytes.fromhex('7061756c').decode('utf-8')
'paul'
b''.fromhex('7061756c')
구분자 없이 사용합니다.
16진수 문자열이 아닌 16진수 정수로 작업할 때의 해결책은 다음과 같습니다.
def convert_hex_to_ascii(h):
chars_in_reverse = []
while h != 0x0:
chars_in_reverse.append(chr(h & 0xFF))
h = h >> 8
chars_in_reverse.reverse()
return ''.join(chars_in_reverse)
print convert_hex_to_ascii(0x7061756c)
Python 3.3.2에서 테스트됨 이를 달성하는 방법은 여러 가지가 있습니다. 다음은 Python에서 제공하는 것만 사용하는 가장 짧은 방법 중 하나입니다.
import base64
hex_data ='57696C6C20796F7520636F6E76657274207468697320484558205468696E6720696E746F20415343494920666F72206D653F2E202E202E202E506C656565656173652E2E2E212121'
ascii_string = str(base64.b16decode(hex_data))[2:-1]
print (ascii_string)
물론, 아무 것도 가져오지 않으려면 언제든지 자신의 코드를 작성할 수 있습니다.다음과 같은 매우 기본적인 것:
ascii_string = ''
x = 0
y = 2
l = len(hex_data)
while y <= l:
ascii_string += chr(int(hex_data[x:y], 16))
x += 2
y += 2
print (ascii_string)
또는 이 작업을 수행할 수도 있습니다...
파이썬 2 인터프리터
print "\x70 \x61 \x75 \x6c"
예
user@linux:~# python
Python 2.7.14+ (default, Mar 13 2018, 15:23:44)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print "\x70 \x61 \x75 \x6c"
p a u l
>>> exit()
user@linux:~#
또는
파이썬 2 원라이너
python -c 'print "\x70 \x61 \x75 \x6c"'
예
user@linux:~# python -c 'print "\x70 \x61 \x75 \x6c"'
p a u l
user@linux:~#
파이썬 3 인터프리터
user@linux:~$ python3
Python 3.6.9 (default, Apr 18 2020, 01:56:04)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print("\x70 \x61 \x75 \x6c")
p a u l
>>> print("\x70\x61\x75\x6c")
paul
파이썬 3 원라이너
python -c 'print("\x70 \x61 \x75 \x6c")'
예
user@linux:~$ python -c 'print("\x70 \x61 \x75 \x6c")'
p a u l
user@linux:~$ python -c 'print("\x70\x61\x75\x6c")'
paul
아무것도 가져올 필요가 없습니다. 예를 들어 16진수를 문자열로 변환하는 방법을 사용하여 이 간단한 코드를 사용해 보십시오.
python hexit.py
Hex it>>some string
736f6d6520737472696e67
python tohex.py
Input Hex>>736f6d6520737472696e67
some string
cat tohex.py
s=input("Input Hex>>")
b=bytes.fromhex(s)
print(b.decode())
언급URL : https://stackoverflow.com/questions/9641440/convert-from-ascii-string-encoded-in-hex-to-plain-ascii
반응형
'programing' 카테고리의 다른 글
각도 인터셉트카 제외 특정 URL (0) | 2023.06.15 |
---|---|
플라스크의 HTTP 상태 코드 201 반환 (0) | 2023.06.15 |
레이블 문자 회전(SeaBorn) (0) | 2023.06.15 |
응용 프로그램이 실행 중인 경로를 유형 스크립트로 가져오려면 어떻게 해야 합니까? (0) | 2023.06.15 |
레일 4: before_filter vs. before_action (0) | 2023.06.15 |