有一个python函数,在cpython2.5.3中运行,但在jython2.5.3中崩溃。它是ApachePig中用户定义函数的一部分,ApachePig使用Jython2.5.3,因此我无法更改它。
输入是一个单字节数组,但实际上是无符号字节,所以我需要对其进行强制转换。
from StringIO import StringIO
import array
import ctypes
assert isinstance(input, array.array), 'unexpected input parameter'
assert input.typecode == 'b', 'unexpected input type'
buffer = StringIO()
for byte in input:
s_byte = ctypes.c_byte(byte)
s_byte_p = ctypes.pointer(s_byte)
u_byte = ctypes.cast(s_byte_p, ctypes.POINTER(ctypes.c_ubyte)).contents.value
buffer.write(chr(u_byte))
buffer.seek(0)
output = buffer.getvalue()
assert isinstance(output, str)
错误是:
s_byte = ctypes.cast(u_byte_p, ctypes.POINTER(ctypes.c_byte)).contents.value
AttributeError: 'module' object has no attribute 'cast'
我猜ctypes.cast函数没有在Jython2.5.3中实现。有解决这个问题的办法吗?
谢谢,史蒂芬
1条答案
按热度按时间9ceoxa921#
这是我的解决方案,这是相当丑陋的,但没有额外的依赖工程。它使用usinged和signed字节的位表示(https://de.wikipedia.org/wiki/zweierkomplement).