python调用c++函数时怎样传入const char*型的参数? 10C

python代码:


import ctypes
so = ctypes.cdll.LoadLibrary
lib = so("./build/liblandmark.so")
path = "/face/360p/1.jpg"
lib.landmark(1,ctypes.c_char_p(path))


c++代码:
#include
#include
#include
#include

#include "cv.h"
#include "highgui.h"

#include "face_detection.h"
#include "face_alignment.h"

#ifdef _WIN32
std::string DATA_DIR = "../../data/";
std::string MODEL_DIR = "../../model/";
#else
std::string DATA_DIR = "./data/";
std::string MODEL_DIR = "./model/";
#endif
extern "C"
{
seeta::FacialLandmark landmark(int argc, char*argv)
{
// Initialize face detection model
seeta::FaceDetection detector("./build/seeta_fd_frontal_v1.0.bin");
detector.SetMinFaceSize(40);
detector.SetScoreThresh(2.f);
detector.SetImagePyramidScaleFactor(0.8f);
detector.SetWindowStep(4, 4);
// Initialize face alignment model
seeta::FaceAlignment point_detector((MODEL_DIR + "seeta_fa_v1.1.bin").c_str());

//load image
const char* img_path = argv;
IplImage *img_grayscale = NULL;
img_grayscale = cvLoadImage(img_path, 0);

IplImage *img_color = cvLoadImage(img_path,1);
int pts_num = 5;
int im_width = img_grayscale->width;
int im_height = img_grayscale->height;


这里的 const char* img_path 传不进去,应该怎么办。尝试过static_cast强制转换类型,将传入c++的char*类型的数据通过static_cast转换为const char* 但还是不行

2个回答

传不进去是什么意思,是在cvLoadImage里取不到路径吗?这个函数是dll里的?如果这样你或许可以用string&试试

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
python调用c++函数时怎样传入const char*型的参数?

python代码: ``` ``` import ctypes so = ctypes.cdll.LoadLibrary lib = so("./build/liblandmark.so") path = "/face/360p/1.jpg" lib.landmark(1,ctypes.c_char_p(path)) ``` ``` c++代码: #include <cstdint> #include <fstream> #include <iostream> #include <string> #include "cv.h" #include "highgui.h" #include "face_detection.h" #include "face_alignment.h" #ifdef _WIN32 std::string DATA_DIR = "../../data/"; std::string MODEL_DIR = "../../model/"; #else std::string DATA_DIR = "./data/"; std::string MODEL_DIR = "./model/"; #endif extern "C" { seeta::FacialLandmark landmark(int argc, char*argv) { // Initialize face detection model seeta::FaceDetection detector("./build/seeta_fd_frontal_v1.0.bin"); detector.SetMinFaceSize(40); detector.SetScoreThresh(2.f); detector.SetImagePyramidScaleFactor(0.8f); detector.SetWindowStep(4, 4); // Initialize face alignment model seeta::FaceAlignment point_detector((MODEL_DIR + "seeta_fa_v1.1.bin").c_str()); //load image const char* img_path = argv; IplImage *img_grayscale = NULL; img_grayscale = cvLoadImage(img_path, 0); IplImage *img_color = cvLoadImage(img_path,1); int pts_num = 5; int im_width = img_grayscale->width; int im_height = img_grayscale->height; ``` ``` 这里的 const char* img_path 传不进去,应该怎么办。尝试过static_cast强制转换类型,将传入c++的char*类型的数据通过static_cast转换为const char* 但还是不行

python调用so 如何传递结构体参数(纯虚接口)?

第一次发求助帖,格式不太规范,烦请各位答友见谅 本人想python调用动态库的一个接口,接口其中一个参数是接口类的指针,不知如何调用,请大牛指教,不胜感激 1、so接口函数 ``` //导出接口函数 extern "C" int CreateCardReaderDevice(const char *pName, ICardReaderDevice *&ppDevice) { ppDevice = new CNDTCardReader_OMRON(); return 0; } ``` 2、结构体 ``` typedef struct _TRACK_INFO { char szTrack1[77]; char szTrack2[38]; char szTrack3[105]; bool bTrack1OK; bool bTrack2OK; bool bTrack3OK; }TRACK_INFO; struct ICardReaderDevice { virtual const char * GetVersion() { string version="2.2"; return version.c_str(); } virtual void Release() = 0; virtual int Init(int nFlag, int nNeedWobble = 3) = 0; virtual int Open(const char *pMode) = 0; virtual void Close()= 0; virtual int EatCard() = 0; virtual int EjectCard() = 0; virtual int AcceptCard(ULONG ulTimeout, IWaitCancel *pWaitCancel,bool Magnetic=true) = 0; virtual int WriteTracks(TRACK_INFO &stTrackInfo) = 0; virtual int ReadTracks(TRACK_INFO &stTrackInfo) = 0; ...... }; ``` 3、接口返回的是子类的对象 ``` class CNDTCardReader_OMRON: public ICardReaderDevice { public: int m_nCardStatus; int m_nLastError; bool m_bCardInGatePosition; bool m_bReTakeIn; int m_nEjectedCard; int m_nTakeCard; CNDTCardReader_OMRON(void); virtual int Init(int nFlag, int nNeedWobble = 3); virtual int EatCard(); virtual int EjectCard(); ...... } ```

无法使用char *p定义字符串指针变量

初学C,用的是VS2017 char *p="xxx"; 这么简单的定义语句提示 const char *" 类型的值不能用于初始化 "char *" 类型的实体 然后在char前面加上const就一切正常了,但字符串指针难道不是char *p这样定义的么?怎么样才能定义一个字符串指针变量?难道是因为VS2017的问题么?

使用C从python调用golang函数

<div class="post-text" itemprop="text"> <p>I have following code in my myPyTest.c file</p> <pre><code>#include&lt;python/Python.h&gt; #include "libtest.h" static PyObject * callThatFunc(PyObject *self, PyObject *args) { const char *a, *b, *c; if (!PyArg_ParseTuple(args, "S", &amp;a, &amp;b, &amp;c)) return NULL; printf("%s", returnThis(a)); return PyString_FromString(b); } static PyMethodDef BarMethods[] = { {"call_bar", callThatFunc, METH_VARARGS, "Execute a shell command."}, {NULL, NULL, 0, NULL} }; PyMODINIT_FUNC initbar(void) { (void) Py_InitModule("bar", BarMethods); } int main() { printf("Hello"); return 0; } </code></pre> <p>check <a href="https://docs.python.org/2/extending/extending.html" rel="nofollow noreferrer">this</a> for above code</p> <p>Now I have following golang code in my_go_call.go file.</p> <pre><code>package main import "C" //export returnThis func returnThis(myString *C.char) *C.char { var result *C.char myStringGo := C.GoString(myString) result = C.CString("Hello, " + myStringGo) return result } func main() { } </code></pre> <p>I have created shared library using command (MAC) <code>go build -ldflags -s -buildmode=c-shared -o libtest.so my_go_call.go</code></p> <p>Then I have setup.py file to build c extension for python. Code of setup.py as follows</p> <pre><code>from distutils.core import setup, Extension module1 = Extension('bar', libraries = ['test'], library_dirs = ['/path/to/lib'], sources = ['myPyTest.c']) setup (name = 'PackageName',version = '1.0',description = 'This is a demo package',ext_modules = [module1]) </code></pre> <p>Now i am building and installing my extension using following commands</p> <pre><code>python setup.py build python setup.py install </code></pre> <p>whenever I call my function in python interpreter i get following error.</p> <pre><code>&gt;&gt;&gt; import bar &gt;&gt;&gt; dir(bar) ['__doc__', '__file__', '__name__', '__package__', 'call_bar'] &gt;&gt;&gt; bar.call_bar('a','b','c') Traceback (most recent call last): File "&lt;stdin&gt;", line 1, in &lt;module&gt; TypeError: function takes exactly 1 argument (3 given) </code></pre> </div>

有全部源码,我调用openssl库的RSA和AES算法进行加密。加密字符串太长就会报错,具体如下。

报错信息是这样的: Error encrypting message: error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size Error decrypting message: error:0407106B:rsa routines:RSA_padding_check_PKCS1_type_2:block type is not 02 我用的Linux环境进行开发的,不过也应该没有太大关系啦! 另外代码上有什么问题也可以指出来,万分感谢!!! 具体代码 如下: ``` #include <openssl/rsa.h> #include <openssl/sha.h> #include <openssl/ssl.h> #include <openssl/aes.h> #include <openssl/evp.h> #include <openssl/pem.h> #include <openssl/err.h> #include <assert.h> #include <iostream> #include <string.h> #include <stdio.h> #include <string> #include <stdlib.h> #define RSA_KEYLEN 2048 #define AES_KEYLEN 128 #define AES_ROUNDS 6 #define KEY_SERVER_PRI 0 #define KEY_SERVER_PUB 1 #define KEY_CLIENT_PUB 2 #define KEY_AES 3 #define KEY_AES_IV 4 #define KEY_LENGTH 2048 #define PUB_EXP 3 //用AES进行加密 int EncodeAES(unsigned char* password,unsigned int pass_len, unsigned char* data,unsigned int data_len,unsigned char** out_data,unsigned int *out_len) { AES_KEY aes_key; if(AES_set_encrypt_key((const unsigned char*)password, 192, &aes_key) < 0) { assert(false); return -1; } std::string strRet; std::string data_bak((const char*)data); unsigned int data_length = data_len; int padding = 0; if (data_len % AES_BLOCK_SIZE > 0) { padding = AES_BLOCK_SIZE - data_len % AES_BLOCK_SIZE; } data_length += padding; while (padding > 0) { data_bak += '\0'; padding--; } for(unsigned int i = 0; i < data_length/AES_BLOCK_SIZE; i++) { std::string str16 = data_bak.substr(i*AES_BLOCK_SIZE, AES_BLOCK_SIZE); unsigned char out[AES_BLOCK_SIZE]; ::memset(out, 0, AES_BLOCK_SIZE); AES_encrypt((const unsigned char*)str16.c_str(), out, &aes_key); strRet += std::string((const char*)out, AES_BLOCK_SIZE); } *out_len=strRet.length(); *out_data=(unsigned char*)malloc(*out_len); *out_data=(unsigned char*)strRet.c_str(); return 0; } //用aes进行解密 int DecodeAES(unsigned char *password,unsigned int pass_len, unsigned char* data,unsigned int data_len,unsigned char** out_data,unsigned int *out_len ) { AES_KEY aes_key; if(AES_set_decrypt_key((const unsigned char*)password, 192, &aes_key) < 0) { assert(false); return -1; } std::string strRet; std::string strData((const char*)data); try { for(unsigned int i = 0; i < data_len/AES_BLOCK_SIZE; i++) { std::string str16 = strData.substr(i*AES_BLOCK_SIZE, AES_BLOCK_SIZE); unsigned char out[AES_BLOCK_SIZE]; ::memset(out, 0, AES_BLOCK_SIZE); AES_decrypt((const unsigned char*)str16.c_str(), out, &aes_key); strRet += std::string((const char*)out, AES_BLOCK_SIZE); } } catch (std::exception const &exc) { std::cerr << "Exception caught " << exc.what() << "\n"; } catch (...) { std::cerr << "Unknown exception caught\n"; } *out_len=strRet.length(); *out_data=(unsigned char*)malloc(*out_len); *out_data=(unsigned char*)strRet.c_str(); return 0; } //生成RSA需要的公钥和私钥 int generateRSAKeys(char ** pri_key, char ** pub_key) { RSA *keypair = RSA_generate_key(KEY_LENGTH, PUB_EXP, NULL, NULL); // To get the C-string PEM form: BIO *pri = BIO_new(BIO_s_mem()); BIO *pub = BIO_new(BIO_s_mem()); PEM_write_bio_RSAPrivateKey(pri, keypair, NULL, NULL, 0, NULL, NULL); PEM_write_bio_RSAPublicKey(pub, keypair); size_t pri_len = BIO_pending(pri); size_t pub_len = BIO_pending(pub); char* prikey = (char*)malloc(pri_len + 1); char* pubkey = (char*)malloc(pub_len + 1); if (prikey == NULL&&pubkey == NULL) { return -1; } BIO_read(pri, prikey, pri_len); BIO_read(pub, pubkey, pub_len); *pri_key = prikey; *pub_key = pubkey; RSA_free(keypair); BIO_free_all(pri); BIO_free_all(pub); return 0; } //用RSA公钥进行加密 int encryptWithPub(char *pub_key,char* msg, char **encrypt, int* encrypt_len ) { RSA *rsa = NULL; BIO* keybio = BIO_new_mem_buf((void *)pub_key, -1); char *err = (char*)malloc(130); if (keybio == NULL) { printf("failed to create key BIO\n"); return -1; } #ifdef RSAPUBKEY if ((rsa = PEM_read_bio_RSA_PUBKEY(keybio, NULL, NULL, NULL)) == NULL) #else if ((rsa = PEM_read_bio_RSAPublicKey(keybio, NULL, NULL, NULL)) == NULL) #endif if (!rsa){ printf(" rsa is null %s\n", ERR_error_string(ERR_get_error(), NULL)); return -1; } *encrypt_len = RSA_size(rsa); *encrypt = (char *)malloc(1024); if ((RSA_public_encrypt(strlen(msg) + 1, (unsigned char*)msg, (unsigned char*)*encrypt,rsa, RSA_PKCS1_PADDING)) == -1) { ERR_load_crypto_strings(); ERR_error_string(ERR_get_error(), err); fprintf(stderr, "Error encrypting message: %s\n", err); return -1; } RSA_free(rsa); free(err); BIO_free_all(keybio); // *encrypt_len=enstr.length(); return 0; } //用RSA私钥进行解密 int decryptWtihPri(char *pri_key,char* msg,char **decrypt, int encrypt_len){ RSA *rsa = NULL; BIO* keybio = BIO_new_mem_buf(pri_key, -1); if (keybio == NULL) { printf("failed to create key BIO\n"); return -1; } #ifdef RSAPRIVATE if ((rsa = PEM_read_bio_RSA_PRIVATE(keybio, NULL, NULL, NULL)) == NULL) #else if ((rsa = PEM_read_bio_RSAPrivateKey(keybio, NULL, NULL, NULL)) == NULL) #endif if (!rsa){ printf(" rsa null %s\n", ERR_error_string(ERR_get_error(), NULL)); return -1; } char *err = (char*)malloc(130); *decrypt = (char*)malloc(encrypt_len); if (RSA_private_decrypt(encrypt_len, (unsigned char*)msg, (unsigned char*)*decrypt, rsa, RSA_PKCS1_PADDING) == -1) { ERR_load_crypto_strings(); ERR_error_string(ERR_get_error(), err); fprintf(stderr, "Error decrypting message: %s\n", err); return -1; } RSA_free(rsa); free(err); BIO_free_all(keybio); return 0; } /** *测试函数部分 */ int test_aes(); int test_rsa(); int main() { test_rsa(); test_aes(); return 0; } int test_rsa() { printf("\n----------THE RSA TESTING -------- \n"); char * pri_key; char * pub_key; generateRSAKeys(&pri_key, &pub_key); //printf("\n%s\n%s\n", pri_key, pub_key); char *encrypt; char *decrypt; int encrypt_length; encryptWithPub(pub_key,(char *)"i havei have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a key a key",&encrypt, &encrypt_length); decryptWtihPri( pri_key,encrypt, &decrypt,encrypt_length); printf("decrypted message: %s\n", decrypt); return 0; } int test_aes() { printf("\n----------THE AES TESTING --------\n"); char* pass=(char*)"key"; int ret; char* data=(char*)"infocoei have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a key ei have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a key re big tree "; char *output=NULL; unsigned int out_len; char *newoutput=NULL; unsigned int new_len; std::cout<<"the length of key:"<<strlen(pass)<<std::endl; std::cout<<"before encryption:"<<data<<std::endl; ret=EncodeAES((unsigned char*)pass, strlen(pass),(unsigned char *)data,strlen(data),(unsigned char **)&output, &out_len); //std::cout<<"the en len:"<<out_len<<std::endl; ret=DecodeAES((unsigned char*)pass, strlen(pass),(unsigned char *)output,out_len,(unsigned char **)&newoutput, &new_len); //std::cout<<"the deenc len:"<<new_len<<std::endl; std::cout<<"after decryption:"<<newoutput<<std::endl; } ``` 代码的运行结果如下: ``` ----------THE RSA TESTING -------- Error encrypting message: error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size Error decrypting message: error:0407106B:rsa routines:RSA_padding_check_PKCS1_type_2:block type is not 02 decrypted message: 惙l= ----------THE AES TESTING -------- the length of key:3 before encryption:infocoei have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a key ei have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a keyi have a key re big tree Exception caught basic_string::substr after decryption:Ϝż§§<¾yK*. [root@localhost boost_encryption]# ``` 我的邮箱是fubohuauser@163.com 有啥问题也可以一起联系交流。谢谢

python3使用ctypes有些c类型没有怎么办?

被实习作业折磨到摸不着头脑 菜狗一只,平常总是靠度娘解决问题,但这次真的搜不到了(╥╯^╰╥) 实在不想用C++......而且已经丢了很久了...... 学校实习任务开发指纹仪的相关软件,调用dll函数。 问题1: dll函数:HANDLE_stdcall sensorOpen(int index) 这个类型是句柄HANDLE,其返回值需要用到,但是Python没有直接HANDLE,我用int接收暂没出现问题,怕之后会遇到先问一个。 问题2: dll函数:int_stdcall sensorCapture(HANDLE handle,unsigned char* imageBuffer, int imageBufferSize)//获取图像 handle就是上面那个,unsigned char* 文档解释是接收的图像即是输入的参数也会输出,后续指纹算法需要,ctypes也没有,怎么实现? 我目前使用imageBuffer = create_string_buffer(所需空间大小),但是没有采集到图像(我检验了该函数返回值,为0,即无图像) 我也试过了create_unicode_buffer,结果也一样。到底是使用方法问题还是其他导致我真的没采集到图像 问题3:(虽然前面的还没解决但先问下)(准确的说目前卡在这里) dll函数:HANDLE stdcall BIOKEY_INIT(int License, WORD *isize, BYTE*Params, BYTE *Buffer, intImageFlag) 问题出在isize:文档描述:[in] 传入一个无符号双字节长度为22 的数组,且 isize[0]和isize[20]为传入图像宽度,isize[1]和 isize[21]为传入图像高度 这isize怎么提前定义? 我尝试使用isize = bytearray()处理,但是毕竟是双字节,光是宽度就有300多,但byte要在0-255之间,而且还不确定都是数字(我试过定义为整型数组,报错don't konw how to convert parameter 2)。作为指纹图像,虽然有函数可以修改采集图像的大小,但是太小了的话数据的完整性和可使用性就大打折扣。所以这个双字节咋整啊 问题4: 有些函数传入参数为int*,咋整......我先去看看ctypes的文档,但是我记得上次看的时候好像没有针对这种指针的...直接使用c_char_p吗?(目前没法验证这个方法是否可行,因为前面就走不通。。。) 总之目前就这些了,实习作业周三开始检查希望会的大佬帮帮我!谢谢啦! 我先滚去看文档了。。。

SWIG 3.0+Python 2.7 报错:TypeError in method ... 求指点

最近需要用Python调用一个C++写的DLL接口,总是出问题于是做了一个小测试,发现有一个类初始化始终报错。 Python调用Dll接口中一个CreateEsunnyQuotClient 初始化方法 传递参数 IEsunnyQuotNotify * 的时候,出现错误,看起来是要传递一个指针变量,但是Python没有指针啊?直接使用ctypes 应该也不对吧,实在不解了。 TypeError: in method 'CreateEsunnyQuotClient', argument 1 of type 'IEsunnyQuotNotify * ' 具体错误信息如图: ![图片说明](https://img-ask.csdn.net/upload/201609/23/1474601335_258908.png) 下面是我做的一些测试用的文件:头文件 example.h、C++文件 example.cpp、SWIG接口文件 example.i、distutils安装文件 setup.py、测试文件 TestExample.py、 我用的环境是Python 2.7 32位、VS2015(2010也可以) 希望高人指点,已经忙了3天3夜了还是没有结果。十分感谢。 -------------------------------------------------------------------------------- /* example.h */ ``` class IEsunnyQuotNotify { public: /** *登录反馈回调函数 * @param err 错误号 0表示登录成功,否则失败 * @param errtext 错误信息 * @return 0表示成功,否则失败 */ virtual int OnRspLogin(int err,const char *errtext)=0; }; //创建接口指针(使用前调用) IEsunnyQuotClient * CreateEsunnyQuotClient(IEsunnyQuotNotify * notify); //释放接口指针(使用后调用) void DelEsunnyQuotClient(IEsunnyQuotClient * client); ``` -------------------------------------------------------------------------------- /* example.cpp */ ``` int IEsunnyQuotClient::Connect(const char *ip, int port) { return 0; } void IEsunnyQuotClient::DisConnect() { return; } class EsunnyQuotClient : public IEsunnyQuotClient { int Connect(const char *ip, int port) { return 0; }; void DisConnect() { return ; }; }; int IEsunnyQuotNotify::OnRspLogin(int err, const char *errtext) { return 0; } IEsunnyQuotClient * CreateEsunnyQuotClient(IEsunnyQuotNotify * notify) { return &EsunnyQuotClient(); } ``` -------------------------------------------------------------------------------- /* example.i*/ ``` /* File : example.i */ %module example %{ #include "example.h" %} class Shape { public: Shape() { nshapes++; } virtual ~Shape() { nshapes--; } double x, y; void move(double dx, double dy); virtual double area() = 0; virtual double perimeter() = 0; static int nshapes; }; class Circle : public Shape { private: double radius; public: Circle(double r) : radius(r) { } virtual double area(); virtual double perimeter(); }; class Square : public Shape { private: double width; public: Square(double w) : width(w) { } virtual double area(); virtual double perimeter(); }; class IEsunnyQuotClient { public: /** *连接行情数据服务器IP及端口 * @param ip 服务器的IP * @param port 服务器的端口 * @return 0表示连接成功,否则失败 */ virtual int Connect(const char *ip,int port)=0; /** *断开当前连接 */ virtual void DisConnect()=0; }; class IEsunnyQuotNotify { public: /** *登录反馈回调函数 * @param err 错误号 0表示登录成功,否则失败 * @param errtext 错误信息 * @return 0表示成功,否则失败 */ virtual int OnRspLogin(int err,const char *errtext)=0; }; //创建接口指针(使用前调用) IEsunnyQuotClient * CreateEsunnyQuotClient(IEsunnyQuotNotify * notify); ``` -------------------------------------------------------------------------------- /* setup.py */ ``` from distutils.core import setup, Extension example_module = Extension('_example', libraries = ['example'], sources=['example_wrap.cxx'], ) setup (name = 'example', version = '0.1', author = "SWIG Docs", description = """example wrap with swig""", ext_modules = [example_module], py_modules = ["example"], ) ``` -------------------------------------------------------------------------------- /* TestExample.py */ ``` #from EsunnyQuot import IEsunnyQuotClient, IEsunnyQuotNotify, CreateEsunnyQuotClient, DelEsunnyQuotClient from example import IEsunnyQuotClient, IEsunnyQuotNotify, CreateEsunnyQuotClient class EsunnyQuotNoify(IEsunnyQuotNotify): def __init__(self, *args, **kwargs): pass class EsunnyQuotClient(IEsunnyQuotClient): def __init__(self): pass client = None try: notify = EsunnyQuotNoify() print type(notify) client = CreateEsunnyQuotClient(notify) finally: if client is not None: #DelEsunnyQuotClient(client) pass ```

ubuntu16.04 Python目录中无3.7.1 但Python版本显示3.7.1 且无法更改

ubuntu16.04 Python目录中无3.7.1 但Python版本显示3.7.1 且无法更改 ![图片说明](https://img-ask.csdn.net/upload/201903/18/1552891033_321432.png) 已解决! 卸载anaconda3 即可

利用winpcap抓包,已经可以抓包,但如何解析包头结构按字段写入文本文件?后面应该添加什么代码?

``` #define HAVE_REMOTE #include <pcap.h> /* packet handler 函数原型 */ void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); int main() { pcap_if_t *alldevs; pcap_if_t *d; int inum; int i=0; pcap_t *adhandle; char errbuf[PCAP_ERRBUF_SIZE]; /* 获取本机设备列表 */ if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) { fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); exit(1); } /* 打印列表 */ for(d=alldevs; d; d=d->next) { printf("%d. %s", ++i, d->name); if (d->description) printf(" (%s)\n", d->description); else printf(" (No description available)\n"); } if(i==0) { printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); return -1; } printf("Enter the interface number (1-%d):",i); scanf("%d", &inum); if(inum < 1 || inum > i) { printf("\nInterface number out of range.\n"); /* 释放设备列表 */ pcap_freealldevs(alldevs); return -1; } /* 跳转到选中的适配器 */ for(d=alldevs, i=0; i< inum-1 ; d=d->next, i++); /* 打开设备 */ if ( (adhandle= pcap_open(d->name, // 设备名 65535, // 65535保证能捕获到不同数据链路层上的每个数据包的全部内容 PCAP_OPENFLAG_PROMISCUOUS, // 混杂模式 1000, // 读取超时时间 NULL, // 远程机器验证 errbuf // 错误缓冲池 ) ) == NULL) { fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); /* 释放设备列表 */ pcap_freealldevs(alldevs); return -1; } printf("\nlistening on %s...\n", d->description); /* 释放设备列表 */ pcap_freealldevs(alldevs); /* 开始捕获 */ pcap_loop(adhandle, 0, packet_handler, NULL); return 0; } /* 每次捕获到数据包时,libpcap都会自动调用这个回调函数 */ void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) { struct tm *ltime; char timestr[16]; time_t local_tv_sec; /* 将时间戳转换成可识别的格式 */ local_tv_sec = header->ts.tv_sec; ltime=localtime(&local_tv_sec); strftime( timestr, sizeof timestr, "%H:%M:%S", ltime); printf("%s,%.6ld len:%d\n", timestr, header->ts.tv_usec, header->len); } ```

linux下free(): invalid next size (fast)的问题

简单来说就是把mac地址转换成00:00:00:00:00:00这种形式,被调函数在for循环i=1时还很正常,i=2的时候执行到macValue += buffer这句话就挂了,报错 free(): invalid next size (fast),实在是找不到原因了,谷歌说内存泄露,可是我实在不知道string这里怎么泄露啊,求各位帮忙看看啊 不胜感激!(另外,我用小程序测试过这段代码完成没问题啊,可是放到大程序里面就不行了,嘤嘤嘤) 主调函数部分 rule.fieldValue[DL_SRC] = ::getMacValueAsString(ofm->match.dl_src); 被调用函数: string getMacValueAsString(const uint8_t* macAddress) { string macValue ; char buffer[8]; for(int i = 0; i < OFP_ETH_ALEN; i++) { uint8_t upperNibble = macAddress[i] >> 4; uint8_t lowerNibble = macAddress[i] & (uint8_t)0xF; sprintf(buffer, "%x%x", upperNibble, lowerNibble); macValue += buffer; cout<<"macValue:"<<macValue<<endl; if(i != (OFP_ETH_ALEN - 1)) { macValue+=':'; } } return macValue; }

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解!

CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解! 目录 博客声明 大数据了解博主粉丝 博主的粉丝群体画像 粉丝群体性别比例、年龄分布 粉丝群体学历分布、职业分布、行业分布 国内、国外粉丝群体地域分布 博主的近期访问每日增量、粉丝每日增量 博客声明 因近期博主写专栏的文章越来越多,也越来越精细,逐步优化文章。因此,最近一段时间,订阅博主专栏的人数增长也非常快,并且专栏价

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

培训班出来的人后来都怎么样了?(二)

接着上回说,培训班学习生涯结束了。后面每天就是无休止的背面试题,不是没有头脑的背,培训公司还是有方法的,现在回想当时背的面试题好像都用上了,也被问到了。回头找找面试题,当时都是打印下来天天看,天天背。 不理解呢也要背,面试造飞机,上班拧螺丝。班里的同学开始四处投简历面试了,很快就有面试成功的,刚开始一个,然后越来越多。不知道是什么原因,尝到胜利果实的童鞋,不满足于自己通过的公司,嫌薪水要少了,选择...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

工作八年,月薪60K,裸辞两个月,投简历投到怀疑人生!

近日,有网友在某职场社交平台吐槽,自己裸辞两个月了,但是找工作却让自己的心态都要崩溃了,全部无果,不是已查看无回音,就是已查看不符合。 “工作八年,两年一跳,裸辞两个月了,之前月薪60K,最近找工作找的心态崩了!所有招聘工具都用了,全部无果,不是已查看无回音,就是已查看不符合。进头条,滴滴之类的大厂很难吗???!!!投简历投的开始怀疑人生了!希望 可以收到大厂offer” 先来看看网...

97年世界黑客编程大赛冠军作品(大小仅为16KB),惊艳世界的编程巨作

这是世界编程大赛第一名作品(97年Mekka ’97 4K Intro比赛)汇编语言所写。 整个文件只有4095个字节, 大小仅仅为16KB! 不仅实现了3D动画的效果!还有一段震撼人心的背景音乐!!! 内容无法以言语形容,实在太强大! 下面是代码,具体操作看最后! @echo off more +1 %~s0|debug e100 33 f6 bf 0 20 b5 10 f3 a5...

不要再到处使用 === 了

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢?我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了,因此建议总是使用===。这些都...

什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!

A站 AcFun弹幕视频网,简称“A站”,成立于2007年6月,取意于Anime Comic Fun,是中国大陆第一家弹幕视频网站。A站以视频为载体,逐步发展出基于原生内容二次创作的完整生态,拥有高质量互动弹幕,是中国弹幕文化的发源地;拥有大量超粘性的用户群体,产生输出了金坷垃、鬼畜全明星、我的滑板鞋、小苹果等大量网络流行文化,也是中国二次元文化的发源地。 B站 全称“哔哩哔哩(bilibili...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

MySQL性能优化(五):为什么查询速度这么慢

前期回顾: MySQL性能优化(一):MySQL架构与核心问题 MySQL性能优化(二):选择优化的数据类型 MySQL性能优化(三):深入理解索引的这点事 MySQL性能优化(四):如何高效正确的使用索引 前面章节我们介绍了如何选择优化的数据类型、如何高效的使用索引,这些对于高性能的MySQL来说是必不可少的。但这些还完全不够,还需要合理的设计查询。如果查询写的很糟糕,即使表结构再合理、索引再...

用了这个 IDE 插件,5分钟解决前后端联调!

点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!作者 |李海庆我是一个 Web 开发前端工程师,受到疫情影响,今天是我在家办公的第78天。开发了两周,...

大厂的 404 页面都长啥样?最后一个笑了...

每天浏览各大网站,难免会碰到404页面啊。你注意过404页面么?猿妹搜罗来了下面这些知名网站的404页面,以供大家欣赏,看看哪个网站更有创意: 正在上传…重新上传取消 腾讯 正在上传…重新上传取消 网易 淘宝 百度 新浪微博 正在上传…重新上传取消 新浪 京东 优酷 腾讯视频 搜...

【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!

网上很多的文章和帖子中在介绍秒杀系统时,说是在下单时使用异步削峰来进行一些限流操作,那都是在扯淡! 因为下单操作在整个秒杀系统的流程中属于比较靠后的操作了,限流操作一定要前置处理,在秒杀业务后面的流程中做限流操作是没啥卵用的。

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

Java14 新特性解读

Java14 已于 2020 年 3 月 17 号发布,官方特性解读在这里:https://openjdk.java.net/projects/jdk/14/以下是个人对于特性的中文式...

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

疫情后北上广深租房价格跌了吗? | Alfred数据室

去年3月份我们发布了《北上广深租房图鉴》(点击阅读),细数了北上广深租房的各种因素对租房价格的影响。一年过去了,在面临新冠疫情的后续影响、城市尚未完全恢复正常运转、学校还没开学等情况下...

面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?

点击上方“朱小厮的博客”,选择“设为星标”后台回复&#34;1024&#34;领取公众号专属资料本文以一个简单的程序开头——数组赋值:int LEN = 10000; int[][] ...

又一起程序员被抓事件

就在昨天互联网又发生一起让人心酸的程序员犯罪事件,著名的百度不限速下载软件 Pandownload PC 版作者被警方抓获。案件大致是这样的:软件的作者不仅非法盗取用户数据,还在QQ群进...

应聘3万的职位,有必要这么刁难我么。。。沙雕。。。

又一次被面试官带到坑里面了。面试官:springmvc用过么?我:用过啊,经常用呢面试官:springmvc中为什么需要用父子容器?我:嗯。。。没听明白你说的什么。面试官:就是contr...

太狠了,疫情期间面试,一个问题砍了我5000!

疫情期间找工作确实有点难度,想拿到满意的薪资,确实要点实力啊!面试官:Spring中的@Value用过么,介绍一下我:@Value可以标注在字段上面,可以将外部配置文件中的数据,比如可以...

Intellij IDEA 美化指南

经常有人问我,你的 IDEA 配色哪里搞的,我会告诉他我自己改的。作为生产力工具,不但要顺手而且更要顺眼。这样才能快乐编码,甚至降低 BUG 率。上次分享了一些 IDEA 有用的插件,反...

【相亲】96年程序员小哥第一次相亲,还没开始就结束了

颜值有点高,条件有点好

太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

一图看完本文 一、 计算机网络体系结构分层 计算机网络体系结构分层 计算机网络体系结构分层 不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。 二、 TCP/IP 基础 1. TCP/IP 的具体含义 从字面意义上讲,有人可能会认为...

腾讯面试题: 百度搜索为什么那么快?

我还记得去年面腾讯时,面试官最后一个问题是:百度/google的搜索为什么那么快? 这个问题我懵了,我从来没想过,搜素引擎的原理是什么 然后我回答:百度爬取了各个网站的信息,然后进行排序,当输入关键词的时候进行文档比对……巴拉巴拉 面试官:这不是我想要的答案 我内心 这个问题我一直耿耿于怀,终于今天,我把他写出来,以后再问,我直接把这篇文章甩给他!!! 两个字:倒排,将贯穿整篇文章,也是面试官...

你怎么看欧阳娜娜空降阿里p8?

前段时间 欧阳娜娜空降阿里P8被骂上热搜 有网友调侃道: 名牌大学毕业的研究生 要在阿里没日没夜、加班加点、 全年无休奋斗5年,才可能有机会 和20岁的欧阳娜娜一起喝下午茶…… 本来嘛,大厂✖明星的营销无可厚非 那是什么让撸代码N年的程序员愤愤不平呢? 还不是因为升到P8真的太难了! 这是很多阿里人甚至互联网人遥不可及的梦想! 阿里P8到底有多牛? 根据知乎大V@半佛仙人透露的情况: 阿里P8基本上要求研究生 5 年以上经验,本科 7 年以上经验; P8 一般去小公司就是各种 O,一般公司(非国企、.

程序员因没转发公司内容,被领导扣500,辞职后:加了三行代码

现如今,程序员在一二线城市可谓是非常的抢手,毕竟年薪那么多,一般在工作了几年之后,程序员想要攒到一套房子的首付是不成问题的,所以一些大龄的女青年在相亲的时候要把程序员当成了首选。但表面上看起来风光的程序员,背地里也受了非常多的委屈,最近有一名程序员没有转发公司的内容到朋友圈被领导扣了500块,当他辞职了之后,却非常淡定。 从个这个帖子中,我们可以看出这名程序员的情绪还是比较激动的,因为没有转发公司的内容到朋友圈,就要被罚款500块,这是非常不合理,换做是别人也不肯接受,而且三次没有转发就要被劝退,这是什么

为什么中国80%的程序员面试造大炮,工作扭螺丝,复制粘贴代码一把梭?

面试造大炮,工作扭螺丝,复制粘贴代码一把梭! 最近无聊和同事无意间聊天,开个玩笑,说我们写的什么代码最多,一位同事说我大部分都是复制粘贴,写什么代码?“我们都是代码的搬运工,都是在重复的写着不同的代码”,哈哈,当时还没有反应过来。 后面想想,其实也是事实,这个玩笑差点毁了我的三观,下面我们简单聊聊。 首先从源头来说,程序员使用语言开发,大部分语言都是相同的,只要熟悉的语言的语法知识,就能做出相应的功能,而很多的功能都是相似的,大致相同。 比如:去年开发了一个社交类项目,里面有用户...

Python垃圾回收机制

Python垃圾回收 引用计数器为主 标记清除和分代回收为辅 + 缓存机制 1. 引用计数器 1.1 环状双向链表 refchain 在python程序中创建的任何对象都会放在refchain链表中。 #define PyObject_HEAD PyObject ob_base; #define PyObject_VAR_HEAD PyVarObject ob_base; // 宏定义,包含 上一个、下一个,用于构造双向链表用。(放到refchain链表中时要用到) #define _PyObj

专升本,学历毁了我的一生!

今天给大家带来一段访谈录音。 这位小伙伴是08年,专科毕业,后来,专升本。 但因为本科不是统招,在就业和跳槽中屡屡碰壁,现在从业12年,仍然还在受学历的影响。 希望通过他的经历,能给同是专科学历的同学一些启发。 视频版: 五月二号早上,B站视频版已经发了,大家可以在B站搜索【启舰杂谈】,去看啦。 文章版: 启舰: 今天我们就主要说的下,你的历程吧。主要是想了解一下,学历在整个职业生涯里的影响 嘉宾: 我觉得现在,包括很多人也有这种想法,包括现在的专科生,他们一开始不知道这个东西.

被裁员了,哎

在一个阳光明媚的下午,突然接到被裁员的通知。 人事告诉我,因为疫情关系,公司也是没办法,两个选择一个降薪一个裁员。当时心里就想降薪不就是变相裁员吗,那我还是识趣的走吧。不过没有裁员补贴,没有想象中的n+1,好心伤。看来有能力的朋友们还是要去大厂工作的,至少被裁了也有丰厚的补贴啊,呜呜呜呜呜呜............. 作为一个咸鱼一样的女程序员,突然感到很迷茫,我是要在软件开发行业继续走下去,还是要转行另谋钱途呢,这个困扰让我不能静心做接下来的守卫工作,那就写点什么吧。 程序员要经常学习新得技术,嗯,这

python实用的几个脚本程序(自己在用)

文章目录一、简介二、 重点1. 数据集划分训练集与测试集1.1 数据集为视频帧文件夹(文件夹划分)1.2 数据集为视频文件(文件划分)2. label的重建2.1 原label读取2.2 新label的建立 一、简介 本文主要是自己近期在做毕业设计(连续手语识别)时候写的几个python脚本,用于处理数据集的。记录一下。 二、 重点 本文撰写采用Windows操作系统,如果是Linux记得修改字符串分割方式及目录层数多加一层。 1. 数据集划分训练集与测试集 1.1 数据集为视频帧文件夹(文件夹划分) tr

29.HTML+CSS3 实现酷炫 Loading 特效

效果 (源码网盘地址在最后) 视频演示 「前端编程实战 29」HTML+CSS3 实现发光复选框网页特效 视频地址一:https://www.bilibili.com/video/BV1dK411W7De/ 视频地址二:https://www.ixigua.com/i6825524219757986318/ 源码 index.html &lt;!DOCTYPE html&gt; &lt

墙裂推荐:GitHub 上这个开源项目可以让你在短短几分钟之内了解一门技术

作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个在划水界鼎鼎有名的蒟蒻… 不知道是不是巧合,最近有好几个读者和我讲,想转行学编程,但是不知道应该学哪个语言,要我给点建议。其实作为一个及其讨厌对别人的发展指手画脚的人,我一般只会说一些我知道的,尽量以一个中立的身份去阐述一些优劣,剩下的让他们自己去判断。 虽然我很想说你们来学 Python 呗… 当然对初学者来说自己去判断是一件很难的事。毕竟未知让人恐惧,在尝试进入到一个以前没有概念的领域里,恐..

为什么招聘程序员都只要本科生,不要专科生?网友答案很现实!

由于互联网的飞速发展大家可能已经发现,最近几年来的各种招聘,很多岗位都要求本科以上学历,只有小型的创业互联网公司艰苦的工作环境,才有部分专科的机会 。这对于专科生来说也是十分悲催的一件事,看看下面的这位HR的经历也着实郁闷,怎么破? 网友评论: 也有网友这么评论道: 网友一:选择本科和专科还得看公司需求,两者能力相当优先本科,选择能力出众者 网友二:要是我坚决选择专科生,其实专科生职业技能也是不会比本科差的 网友三:其实本科有些甚至不如专科,学历不能决定一切!!! 网友四:选择本科生把,各方面比较优

相关热词 c# 按行txt c#怎么扫条形码 c#打包html c# 实现刷新数据 c# 两个自定义控件重叠 c#浮点类型计算 c#.net 中文乱码 c# 时间排序 c# 必备书籍 c#异步网络通信
立即提问