Es gibt eine Python-Funktion, die in CPython 2.5.3 läuft, aber in Jython 2.5.3 abstürzt. Es ist Teil einer benutzerdefinierten Funktion in Apache Pig, die Jython 2.5.3 verwendet, so dass ich es nicht ändern kann.Casting in Jython 2.5.3
Die Eingabe ist ein Array von singed Bytes, aber in Wirklichkeit sind das Bytes ohne Vorzeichen, also muss ich es umwandeln.
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)
Der Fehler ist:
s_byte = ctypes.cast(u_byte_p, ctypes.POINTER(ctypes.c_byte)).contents.value
AttributeError: 'module' object has no attribute 'cast'
ich die ctypes.cast Funktionen erraten ist nicht implemeted in Jython 2.5.3. Gibt es eine Problemumgehung für dieses Problem?
Danke, Steffen
Dieser Code kann wahrscheinlich 'struct.unpack' und' struct.pack' mit neu implementiert werden, siehe [struct module] (https://docs.python.org/2/library/struct.html) –