передача строки из python в c ++ с использованием ctypes - отправляется только первый символ - PullRequest
1 голос
/ 07 марта 2019

Я пытаюсь отправить многосимвольную строку из Python в C ++, используя ctypes. Однако передается только первый символ каждой строки.

Это вызов в Python:

ctypes.cdll.LoadLibrary(os.path.abspath("nodispersion.so"))
ctypes.CDLL(os.path.abspath('nodispersion.so')).nodispersion('teststring')

А как я определяю в C ++:

extern "C" void nodispersion(char* test)
{

    cout << "print test " << test << "\n";
}

В результате печатается только 't'.

Другие типы, такие как int pass fine. Кроме того, если я определяю char * в c ++, он печатается нормально, поэтому я предполагаю, что это что-то, когда он передается из Python. Любой совет приветствуется.

1 Ответ

0 голосов
/ 08 марта 2019

Спасибо, Диллон Дэвис:

Попробуйте ctypes.CDLL (os.path.abspath ('nodispersion.so')). Nodispersion (b'teststring '). Обратите внимание на b

Это решило мою проблему в случае передачи строки 'teststring'

Однако затем я хотел передать строку, которая ранее была определена в Python, как переменную. Это было решено с помощью функции bytes и определением кодировки как 'utf8':

a = 'teststring'
ctypes.CDLL(os.path.abspath('nodispersion.so')).nodispersion(bytes(a, encoding='utf8'))
...