Использовать шестнадцатеричный байтовый массив Cython Python для указателя на символ C - PullRequest
0 голосов
/ 03 июля 2018

Я хочу отправить шестнадцатеричный байтовый массив в C, который преобразуется в указатель на символ.

Это код части Cython.

cpdef c_write(int sd, char* buf, int len, unsigned int flags):
    send_message(sd, buf, len, flags)

А это код, который использует функцию Cython для реализации tcp / ip.

class TcpClient:
def __init__(self, host, port, timeout, block):
    self._host = host
    self._port = port
    self._timeout = timeout
    self._block = block
    self._sock = libtcp.c_create_socket()

def connect(self):
    libtcp.c_connect(self._sock, self._host.encode(), self._port)

def disconnect(self):
    libtcp.c_disconnect(self._sock)

def recv(self):
    libtcp.c_start_process()

def send(self, buf):
    libtcp.c_write(self._sock, buf, len(buf), 0)

def register_recv_message_callback(self, py_func):
    libtcp.c_register_recv_message_callback(self._sock, py_func)

client = TcpClient("127.0.0.1", 2000, 10, True)
client.connect()
client.send("abc".encode())

Когда я отправляю "abc", он работает хорошо. Но когда я отправляю шестнадцатеричный массив, как:

b'\x02\x00\x08\x00'

Он просто получит 1 длину массива. Может быть, это вызвано косой чертой '\'.

Итак, как мне решить эту проблему?

...