我正在移植和更新一个旧应用程序,我遇到了这个功能。我想知道更多关于它的信息,但我实际上不知道它叫什么。我假设它有一个流行的名字。有人知道吗?
这个版本是用 Python 编写的,尽管它最初是用 Java 编写的。
def encode(msg): # msg is a string
msg_len = len(msg)
j = (msg_len + 6) / 7
k = 0
cbytesOutput = [ctypes.c_byte(0)]*(msg_len + j) # return is msg length + j bytes long
for l in xrange(j):
i1 = l * 8
j1 = i1
byte0 = ctypes.c_byte(-128)
byte1 = ctypes.c_byte(1)
k1 = 0
while k1 < 7 and k < msg_len:
byte2 = ctypes.c_byte(ord(msg[k]))
if (byte2.value & 0xffffff80) != 0:
byte0 = ctypes.c_byte(byte0.value | byte1.value)
j1 += 1
cbytesOutput[j1] = ctypes.c_byte(byte2.value | 0xffffff80)
byte1 = ctypes.c_byte(byte1.value << 1)
k += 1
k1 += 1
cbytesOutput[i1] = byte0
return cbytesOutput
一般对算法有什么评论吗?我正在考虑更换它。Profiler 说它是整个应用程序中最糟糕的功能(60% 的时间在最慢的代码路径上)并且它也会使数据膨胀。
谢谢