Skip to content

Instantly share code, notes, and snippets.

@RyanKor
Created April 19, 2022 22:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RyanKor/74034b5a0c0d4702bdff12b3c654c3e7 to your computer and use it in GitHub Desktop.
Save RyanKor/74034b5a0c0d4702bdff12b3c654c3e7 to your computer and use it in GitHub Desktop.
대규모 서비스를 지탱하는 기술 첫번째 과제
from struct import pack, unpack
from typing import List, TextIO
def encode_number(number: int) -> TextIO:
"""
VB Code Encode Number method
:param number:
:return:
Usage
import vb
vb.encode_number(128)
"""
byte_lists = []
while True:
byte_lists.insert(0, number % 128)
if number < 128:
break
number = number // 128
byte_lists[-1] += 128
return pack("%dB" % len(byte_lists), *byte_lists)
def encode(number: List[int]) -> TextIO:
"""
VB Code Encode method
:param number:
:return:
Usage
import vb
vb.encode([32, 64, 128])
"""
return b"".join([encode_number(num) for num in number])
def decode(bytestream: TextIO) -> List[int]:
"""
VB Code Decode method
:param bytestream:
:return:
Usage
import vb
vb.decode(b'\xa0\xc0\x01\x80') # bytestream type
"""
n = 0
numbers = []
bytestream = unpack('%dB' % len(bytestream), bytestream)
for byte in bytestream:
if byte < 128:
n = 128 * n + byte
else:
n = 128 * n + (byte - 128)
numbers.append(n)
n = 0
return numbers
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment