나는 기본적으로 2 진법의 벽인 큰 숫자를 가지고 있습니다. 어떻게 그 숫자를 실제 숫자를 저장하지 않고서 읽을 수있는 원시 바이트로 파일에 쓸 수 있습니까? ? 또한, 파일에있는 원시 바이트를 어떻게 디코딩합니까?숫자를 바이트로
바이너리 : 0b101010011000010000 소수 : 173584 바이트 : ???
나는 기본적으로 2 진법의 벽인 큰 숫자를 가지고 있습니다. 어떻게 그 숫자를 실제 숫자를 저장하지 않고서 읽을 수있는 원시 바이트로 파일에 쓸 수 있습니까? ? 또한, 파일에있는 원시 바이트를 어떻게 디코딩합니까?숫자를 바이트로
바이너리 : 0b101010011000010000 소수 : 173584 바이트 : ???
임의로 긴 비트 시퀀스가 음수가 아닌 기본 2 숫자를 나타내는 경우 해당 비트 중 8 개 그룹은 기본 256 숫자의 숫자를 고려할 수 있으며 파일의 문자열로 쓸 수 있습니다 8 비트 문자. 문자열을 다시 읽은 후 프로세스를 반대로하면이 문자열을 원래의 번호로 다시 디코딩 할 수 있습니다.
다음은 this answer에서 Base 62 conversion in Python으로 파생 된 것입니다.
def base256_encode(n): # non-negative integer to byte string
if n > 0:
arr = []
while n:
n, rem = divmod(n, 256)
arr.append(chr(rem))
return ''.join(reversed(arr))
elif n == 0:
return '\x00'
else:
raise ValueError("can't convert negative value to a byte string")
def base256_decode(s): # (big-endian) byte string to number
return reduce(lambda a, c: a*256 + ord(c), s, 0)
def binrepr(s): # utility
return ' '.join(('{:08b}'.format(ord(c))) for c in s)
n = 173584
print 'n:', n
en = base256_encode(n)
print 'binary bytes:', binrepr(en)
with open('rawbits.bin', 'wb') as outf:
outf.write(en)
with open('rawbits.bin', 'rb') as inf:
print 'read from file:', base256_decode(inf.read())
출력 :
n: 173584
binary bytes: 00000010 10100110 00010000
read from file: 173584
나는이 도움이되는지 확실하지 않다거나 직접 질문에 대답하는 경우하지만 ...
독점적 파이썬에서 파일을 액세스하려면
너는 단지 그 일을 피클 할 수있다. 이런 식으로 뭔가 : 큰 숫자가 당신의 여가에서 읽을 수 있지만, 나는 그것이 파이썬의 영역의 유용한 외부 될 것이라고 생각하지 않는 파일 'trash.txt'에 저장됩니다>>> x = 0b0010101011010100101101010010101100001011101010001010101001010110110101011011111111010100100111110101001000100111011101101
>>> x
444781385027604204959187557780049645
>>> import pickle
>>> pickle.dump(x, open('trash.txt', 'wb'))
>>> pickle.load(open('trash.txt', 'rb'))
444781385027604204959187557780049645
.
입력 예를 표시하십시오. – vaultah
http://pastebin.com/KXpyZJYw – user3023610
\ * Sigh \ * - 입력 사항의 작은 샘플 *을 ** 질문 **에 표시하십시오. – jonrsharpe