mirror of
https://github.com/pmret/papermario.git
synced 2024-11-13 22:43:00 +01:00
46 lines
1.1 KiB
Python
Executable File
46 lines
1.1 KiB
Python
Executable File
#! /usr/bin/python3
|
||
|
||
def decode(data):
|
||
length = 0
|
||
is_dbl_char = False
|
||
for byte in data:
|
||
if byte == 0 and not is_dbl_char:
|
||
break
|
||
|
||
# ignore null terminator when reading double-byte char
|
||
is_dbl_char = False
|
||
if byte & 0xF0 == 0x80:
|
||
is_dbl_char = True
|
||
if byte & 0xF0 == 0x90:
|
||
is_dbl_char = True
|
||
if byte & 0xF0 == 0xE0:
|
||
is_dbl_char = True
|
||
if byte & 0xF0 == 0xF0:
|
||
is_dbl_char = True
|
||
|
||
length += 1
|
||
|
||
return data[:length].decode('shift-jis')
|
||
|
||
if __name__ == "__main__":
|
||
import sys
|
||
|
||
if len(sys.argv) <= 1:
|
||
print("usage: ./sjis.py <bytes...>")
|
||
print("decodes zero-terminated SJIS from arbitrary hex bytes.")
|
||
print("e.g.")
|
||
print(" ./sjis.py 80072F64 80072F90 80072FA8 00000000")
|
||
print(" エリア KMR その1")
|
||
exit(1)
|
||
|
||
s = "".join(sys.argv[1:])
|
||
|
||
data = bytearray()
|
||
for i in range(0, len(s), 2):
|
||
byte = eval(f"0x{s[i]}{s[i + 1]}")
|
||
data.append(byte)
|
||
|
||
print(data)
|
||
|
||
print(decode(data))
|