欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python獲取C++中返回的char*字段的兩種思路

 更新時間:2025年04月10日 10:13:19   作者:TGTSTTG  
有時候需要獲取C++函數(shù)中返回來的不定長的char*字符串,本文小編為大家找到了兩種解決問題的思路,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

有時候需要獲取C++函數(shù)中返回來的不定長的char*字符串,目前我找到兩種解決問題的思路,具體實現(xiàn)如下:

一、將char*放入結(jié)構(gòu)體中

c++函數(shù)如下:

typedef struct FileData {
        long long lenth;
        char* data;
};
 
bool GetData(FileData *data)
{
    if (data == nullptr) {
        return false;
    }
    data->data = new char[255];
    memset(data->data, 0, 255);
    const char* laosi = "wdaweqweqweqweqweqweqweqwdvdggggsdfsferqwerawerqwerqwerqerqwedsd";
    memcpy(data->data, laosi, strlen(laosi));
    data->lenth = strlen(laosi);
    return true;
}

python代碼如下:

import ctypes
import os
import platform
from threading import Thread,Lock
 
CharPtr = ctypes.POINTER(ctypes.c_char)
class FileData(ctypes.Structure):
    _fields_=[
        ("lenth",ctypes.c_longlong),
        ("data",CharPtr)
    ]
 
FileDataPtr = ctypes.POINTER(FileData)
 
def GetDll():
    if platform.system().lower() == 'windows':
        isWinPlat_ = True
    else:
        isWinPlat_ = False
    currentPath_ = os.getcwd().replace('\\','/') 
    if isWinPlat_:
        dll_ = ctypes.CDLL(currentPath_ + '/PyTest.dll')
    else:
        dll_ = ctypes.CDLL(currentPath_ + '/PyTest.so')
    return dll_
 
pytestdll_ = GetDll()
 
def GetData():
    getDataF = pytestdll_.GetData
    getDataF.argtypes=[FileDataPtr]
    getDataF.restype = ctypes.c_bool
 
    dataa = FileData()
    ret = getDataF(ctypes.byref(dataa))
    print(dataa.lenth)
    len = dataa.lenth
    for i in range(len):
        print(dataa.data[i])
 
    charArr = ctypes.c_char*dataa.lenth
    char_arr = charArr(*dataa.data[:dataa.lenth])
    print(char_arr.raw)
 
    return ret
 
GetData()

二、將char*作為返回值

c++代碼如下:

char* GetDatas(long long& lenth)
{
    char* data = new char[255];
    memset(data, 0, 255);
    const char* laosi = "wdaweqweqweqweqweqweqweqwdvdggggsdfsferqwerawerqwerqwerqerqwedsd";
    memcpy(data, laosi, strlen(laosi));
    lenth = strlen(laosi);
    return data;
}

python代碼如下:

import ctypes
import os
import platform
from threading import Thread,Lock
 
CharPtr = ctypes.POINTER(ctypes.c_char)
class FileData(ctypes.Structure):
    _fields_=[
        ("lenth",ctypes.c_longlong),
        ("data",CharPtr)
    ]
 
FileDataPtr = ctypes.POINTER(FileData)
 
def GetDll():
    if platform.system().lower() == 'windows':
        isWinPlat_ = True
    else:
        isWinPlat_ = False
    currentPath_ = os.getcwd().replace('\\','/') 
    if isWinPlat_:
        dll_ = ctypes.CDLL(currentPath_ + '/PyTest.dll')
    else:
        dll_ = ctypes.CDLL(currentPath_ + '/PyTest.so')
    return dll_
 
pytestdll_ = GetDll()
 
def GetDataS():
    getDatasF = pytestdll_.GetDatas
    getDatasF.argtypes=[ctypes.POINTER(ctypes.c_longlong)]
    getDatasF.restype = ctypes.c_char_p
    lengths = ctypes.c_longlong(0)
    ret = getDatasF(ctypes.byref(lengths))
    print(lengths.value)
    print(ret)
GetDataS()

到此這篇關(guān)于Python獲取C++中返回的char*字段的兩種思路的文章就介紹到這了,更多相關(guān)Python獲取C++返回char*字段內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論