Я хочу отправить шестнадцатеричный массив байтов на C, который преобразован в указатель char.
Это код части 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 размер массива. Может быть, из-за косой черты '\'.
Итак, как мне решить эту проблему?
Да. верно!!! Если я попытаюсь изменить байты, например '\\ x02 \\ x00 \\ x08 \ x00', все будет в порядке
Теперь я знаю, в чем проблема. Это просто вызвано printf в c. Я использую pritf ("% s") для распечатки шестнадцатеричного массива, поэтому он просто выводит первый символ :(.






Это просто C, игнорирующий параметр
lenи предполагающий, что первый 0 завершает строку?